ページリストの日付入りカスタムテンプレートの改造について

2010年12月17日 at 9:34

お世話になります。
こちらに記載されているhttp://concrete5-japan.org/help/design/block_custom_template/の「例:ページリストブロックに日付を加える」に指定期間新着アイコンを表示させたいのですが、今日が本格的に始めてPHPを触ってます。
色々と予約語のループ処理など試してみたのですが、最後は何だか訳が解らない事になってしまいましたので、解らない場所にコメントしてます。

根本的に間違っているかとおもいますが、ご指導宜しくお願いいたします。

以下コード
-------------------------------------------------------------------
<?php
defined('C5_EXECUTE') or die(_("Access Denied."));
$textHelper = Loader::helper("text");
// now that we're in the specialized content file for this block type,
// we'll include this block type's class, and pass the block to it, and get
// the content

if (count($cArray) > 0) { ?>
<div class="ccm-page-list">

<?php
for ($i = 0; $i < count($cArray); $i++ ) {
$cobj = $cArray[$i];
$title = $cobj->getCollectionName(); ?>

<h3 class="ccm-page-list-title"><a href="<?php echo $nh->getLinkToCollection($cobj)?>"><?php echo $title?></a></h3>

/*(例)Y年m月d日の後にnewアイコンを表示させたい。

<div class="ccm-page-list-date">
ココに予約語を入れなければいけないのかなと思うのですが?forか何かでループ処理をしなければいけないのかなと?
$days=30;
$today=date('U'); $cobj->getCollectionDatePublic('Y年m月d日');
$diff1=date('U',($today - $entry))/86400;
if ($days > $diff1) {
ページリストフォルダーに入れたイメージの呼び出しパスが良く解らなかったので絶対パスにしています。
echo '<img src="http://localhost/concrete5/images/new.gif" alt="New" />';
}
?></div>

*/

<div class="ccm-page-list-description">
<?php
if(!$controller->truncateSummaries){
echo $cobj->getCollectionDescription();
}else{
echo $textHelper->shorten($cobj->getCollectionDescription(),$controller->truncateChars);
}
?>
</div>

<?php }
if(!$previewMode && $controller->rss) {
$btID = $b->getBlockTypeID();
$bt = BlockType::getByID($btID);
$uh = Loader::helper('concrete/urls');
$rssUrl = $controller->getRssUrl($b);
?>
<div class="rssIcon">
<a href="<?php echo $rssUrl?>" target="_blank"><img src="<?php echo $uh->getBlockTypeAssetsURL($bt, 'rss.png')?>" width="14" height="14" /></a>

</div>
<link href="<?php echo $rssUrl?>" rel="alternate" type="application/rss+xml" title="<?php echo $controller->rssTitle?>" />
<?php
}
?>
</div>
<?php }

if ($paginate && $num > 0 && is_object($pl)) {
$pl->displayPaging();
}

?>

Re: ページリストの日付入りカスタムテンプレートの改造について

2010年12月17日 at 9:51
あっ!まず<div class="ccm-page-list-date"><?php echo $cobj->getCollectionDateLastModified ('Y年m月d日'); ?></div>で日付をechoしなければいけませんよね!その後、別に表示させるクラスを指定しなければいけないのでしょうか?
どちらにせよコードがはっきり言って良く解らないです。
マル投げ状態ですみません。
 

Re: Re: ページリストの日付入りカスタムテンプレートの改造について

2010年12月17日 at 20:42
参考にされたWordPressのコードですが、まず現在時間と記事の更新時間をUnixtime形式でそれぞれ変数$today、$entryに代入していますね。
$today=date('U'); $entry=get_the_time('U');

それから、現在時刻と記事の更新時刻の差を引き算で出して、それが$daysに代入した日数を下回っていればNEWアイコンを出しているわけです。もちろん、引き算するからには形式を併せておかないといけません。

concrete5の場合はこのように代入してください。
$today=date('U'); $entry=$cobj->getCollectionDatePublic('U');

呼び出し形式を片方「Y年m月d日」にしてしまうと、比較できません。
もちろん、ソースに出力する際は自由です。

date関数の詳細はこちら
http://www.phppro.jp/phpmanual/php/function.date.html
 

Re: Re: Re: ページリストの日付入りカスタムテンプレートの改造について

2010年12月17日 at 22:49
hissyさんご返信・ご回答有難うございます。
無事動作させる事が出来ました。
有難うございます。
いや~はっきり言って難しいです。
頭のの中だけがループしていたようです(爆)。

if関数で条件分岐してあるので、最初からループ処理をする必要も無いのですね、(いまいちループ処理の活用も良く解ってはなのですが・・・)

変数 $todayに$cobj->getCollectionDatePublic('U');を$entryに代入させて、
$daysの日数を$diff1に現在時刻-(更新した時刻を86400秒で割った秒数)を代入してやって条件分岐で代入している$days日数を$diff1に代入された数値よりも$daysの方が大きい間はechoでイメージを出力すると考えてよいのでしょうか?

何となく今回の文法で使用する変数の代入方法が解ったような気がしますが理解していないようでしたら勉強会の時にでもお叱りを下してください。

この度は有難うございました。