ページリスト絞り込み

2012年6月27日 at 21:46

他ページでページリスト表示させているページを、一部のページリストでのみページリスト表示させないようにしたいのですが、仕様的に困難でしょうか。
分かる方いらっしゃいましたら、宜しくお願いします。

タグ:

Re: ページリスト絞り込み

2012年6月27日 at 21:50
その一部のページリストでのみ表示しない用の属性を作成し、
ページリストのカスタムテンプレートでその作成した属性のページを表示しないように作ればいけると思います。
 

Re: ページリスト絞り込み

2012年6月27日 at 22:13
属性のページを表示しないのタグがちょっとよくわかってないですが…。なるほどです。
 

Re: Re: ページリスト絞り込み

2012年6月27日 at 22:31
僕が作成するならという前提で

管理画面のページとテーマのメニューの属性を開き、属性を追加で真偽値を選択し、新規作成を押します。
「ハンドル」に適当な名前をアルファベットでつけます。今回は「page_list_disable」 とします。
「名前」に適当な名前をつけます。今回は「一部のページリストで表示しない」とします。
設定は僕もよく分かってないのですが、このまま空白で新規ボタンを押す。

これで属性の完成

省きたいページに行き
編集->設定からカスタム属性を追加で先ほど作成した「一部のページリストで表示しない」を選択し、チェックを入れる

次にページリストのカスタムテンプレートですがルートのblocks に page_list/templates フォルダを作成し、concrete/block/page_list/view.php をコピーして page_list_disable.php に 変更します。

page_list_disable.php を 編集し
55行目あたりを
<?php if(!$page->getAttribute('page_list_disable')) { ?>
<h3 class="ccm-page-list-title">
<a href="<?php echo $url ?>" target="<?php echo $target ?>"><?php echo $title ?></a>
</h3>
<div class="ccm-page-list-description">
<?php echo $description ?>
</div>
<?php } ?>
に変更します。(太字部分を追加)

あとはページリストを作成して、Page List Disable を 適用すればいけるはずです。
 

Re:Re:Re:ページリストの絞り込み

2012年6月28日 at 1:40
view.phpを利用するとうまくいくのですが、元々使用していたカスタムテンプレートだとなぜかうまくいかないです;

出力するページリストをif文で条件分岐させているからだと思うのですが…。
 

Re: Re:Re:Re:ページリストの絞り込み

2012年6月28日 at 7:46
もともと使用されてたカスタムテンプレートにif文を入れなければいけません。
そのカスタムテンプレート見せていただけるなら確認してみますが、どうでしょうか?
 

Re: Re: Re:Re:Re:ページリストの絞り込み

2012年6月28日 at 10:35
idでクラスやリンク先を変えてます。


<?php
defined('C5_EXECUTE') or die("Access Denied.");

$press_id = 137;
$event_id = 141;
$ir_id = 134;

$isFirst = true; //So first item in list can have a different css class (e.g. no top border)
$excerptBlocks = ($controller->truncateSummaries ? 1 : null); //1 is the number of blocks to include in the excerpt
$truncateChars = ($controller->truncateSummaries ? $controller->truncateChars : 0);
$i = 0;
foreach ($cArray as $cobj) {
$title = $cobj->getCollectionName();
$date = $cobj->getCollectionDatePublic('Y.m.d');
$link = $nh->getLinkToCollection($cobj);
$parent = $cobj->getCollectionParentID();
$firstClass = $isFirst ? 'first-entry' : '';

if ($i%2 == 0) {
echo '<div class="lateone">';
} else {
echo '<div class="lighten_bd"><div class="lighten">';
}

echo '<div class="date">' . $date . '</div>';

switch ($parent) {
case $press_id :
$class = 'add_press';
break;
case $event_id :
$class = 'add_exh';
break;
case $ir_id :
$class = 'add_ir';
break;
default :
$class = 'add_press';
break;
}

echo '<div class="' . $class . '">';

echo '<a href="/index.php/news">' . $title . '</a>';
echo '</div>';
echo '<div style="clear:both;"></div>';

if ($i%2 == 0) {
echo '</div>';
} else {
echo '</div></div>';
}

$isFirst = false;
$i++;
}
 

Re: Re: Re: Re:Re:Re:ページリストの絞り込み

2012年6月28日 at 11:46
これはページリストのカスタムテンプレートですか?

if文をどこに挿入するかですが、
forearch文の1行下にif文を書き
$i++; の1行下に閉じ括弧

これでできませんでしょうか?
 

Re: ページリスト絞り込み

2012年6月29日 at 3:54
はい、ページリストのカスタムテンプレートで、class名を振り分けて違った表示をさせてます。
上記方法で試したのですが、上手くいかないです;;
 

Re: ページリスト絞り込み

2012年6月29日 at 7:38
<?php
defined('C5_EXECUTE') or die("Access Denied.");

$press_id = 137;
$event_id = 141;
$ir_id = 134;

$isFirst = true; //So first item in list can have a different css class (e.g. no top border)
$excerptBlocks = ($controller->truncateSummaries ? 1 : null); //1 is the number of blocks to include in the excerpt
$truncateChars = ($controller->truncateSummaries ? $controller->truncateChars : 0);
$i = 0;
foreach ($cArray as $cobj) {
if(!$cobj->getAttribute('page_list_disable')) {
$title = $cobj->getCollectionName();
$date = $cobj->getCollectionDatePublic('Y.m.d');
$link = $nh->getLinkToCollection($cobj);
$parent = $cobj->getCollectionParentID();
$firstClass = $isFirst ? 'first-entry' : '';

if ($i%2 == 0) {
echo '<div class="lateone">';
} else {
echo '<div class="lighten_bd"><div class="lighten">';
}

echo '<div class="date">' . $date . '</div>';

switch ($parent) {
case $press_id :
$class = 'add_press';
break;
case $event_id :
$class = 'add_exh';
break;
case $ir_id :
$class = 'add_ir';
break;
default :
$class = 'add_press';
break;
}

echo '<div class="' . $class . '">';

echo '<a href="/index.php/news">' . $title . '</a>';
echo '</div>';
echo '<div style="clear:both;"></div>';

if ($i%2 == 0) {
echo '</div>';
} else {
echo '</div></div>';
}

$isFirst = false;
$i++;
}
}

太字の部分が追加したものです。
 

Re: ページリスト絞り込み

2012年6月29日 at 11:17
ありがとうございます!上手くいきました。
 

Re: Re: ページリスト絞り込み

2012年6月29日 at 13:39
うまく行ったと思ったのですが、なぜかリストから排除した分だけリスト表示数を追加しないと表示されなくなってしまいました;
 

Re: ページリスト絞り込み

2012年6月29日 at 18:11
すみません。リスト表示数を追加とはどういう意味でしょうか?
表示されないというのは全て?一部?
できれば具体的に書いていただけると助かります。

僕は標準のインストールしただけのものでテーマはグリークヨーグルトで上記のカスタムテンプレートを追加してテストしたのですが、意図したとおり表示されます。

それと気になったのですが、このソースでは、すべてnewsにリンクするように思います。

見当違いのことを言っていたらごめんなさい。
 

Re: Re: ページリスト絞り込み

2012年6月29日 at 18:47
説明が、曖昧ですみません、表示数を5にしているにもかかわらず、属性を当てたページを追加すると、表示数が1つ減ってしまうようなことになってます。今ハンドル名とカスタムテンプレートの名前が違ったりしていたので、他に変な間違いをしてないか調べてます。
 

Re: Re: Re: ページリスト絞り込み

2012年6月30日 at 12:34
いえ、5ページ分表示で4ページ分しか表示されないのはプログラムどおりです。間違いではありません。
もし、そのあたりの制御が必要なら、ページリストブロックのcontroller.php をカスタマイズする必要があります。
 

Re: Re: Re: Re: ページリスト絞り込み

2012年6月30日 at 21:41
ご返答ありがとうございます。
バグではないのですね; 結構高度なカスタマイズになるのでしょうか; ページリストは複数ページで利用しているので、他のページの影響が恐そうですね;
 

Re: ページリスト絞り込み

2012年6月30日 at 22:29
controller.phpを触るのは恐いので(phpの知識が乏しくデバック不可なので;)コンポーザーに特集ページのチェック項目を作って対応することにしました。
(別スレッドで、特集ページの機能を使うと保存し直さないと表示されないと嘆いていたのですが、その一覧ページはコンポーザー使って作成するようにしていたので、もしやと思いチェック項目をコンポーザーに設けたところ、問題なく反映されました。いろいろとありがとうございます。)