Re: 検索ブロックの中で表示するトピック属性の見た目をカスタマイズしたい

2017年10月6日 at 16:11

私も管理画面と同じフォルダツリーのデザインがフロントにも表示されるのにはげんなりしました。
JavaScriptで生成されているところは一切無視して、search.phpを書き換えてしまうのが手っ取り早いかと思います。

参考までに、私が行ったカスタマイズについて記載させていただきます。バージョンは8.2です。

私の場合、階層構造はデザイン上必要なかったため、特定のトピックツリー下のトピックをすべてチェックボックスとして並べています。検索ブロックに独自テンプレートを追加してCSSでチェックボックスをボタンレイアウトにして表示しました。(添付キャプチャ)

手っ取り早くソースを記載しますが、search.phpをごっそり下記に書き換えています。

/application/attributes/topics/search.php


<?php defined('C5_EXECUTE') or die("Access Denied.");
if (is_object($tree)) {
if (!isset($selectedNode)) {
$selectedNode = NULL;
}
?>
<section class="contents tag-view">
<?php
$node = $tree->getRootTreeNodeObject();
if (is_object($node)) {
$node->populateDirectChildrenOnly();
?>
<script type="text/javascript">
$(function() {
$('#check_all').on('click', function() {
$('.check-button').prop('checked', this.checked);
});

$('.check-button').on('click', function() {
if ($('.check-button-child :checked').length == $('.check-button-child :input').length){
$('#check_all').prop('checked', 'checked');
}else{
$('#check_all').prop('checked', false);
}
});
});
</script>
<ul class="tag">
<li>
<input type="checkbox" class="check-button" id="check_all" />
<label class="label" for="check_all"><?php echo t('All'); ?></label>
</li>

<?php
foreach ($node->getChildNodes() as $child) {
?>
<li class="check-button-child">
<input type="checkbox" class="check-button" id="akID[<?php echo $attributeKey->getAttributeKeyID(); ?>][treeNodeID]<?php echo $child->getTreeNodeID(); ?>" name="akID[<?php echo $attributeKey->getAttributeKeyID(); ?>][treeNodeID][]" value="<?php echo $child->getTreeNodeID(); ?>"<?php echo (is_array($selectedNode)) ? ((in_array($child->getTreeNodeID(), $selectedNode)) ? 'checked="checked"' : '') : '' ; ?>/>
<label class="label" for="akID[<?php echo $attributeKey->getAttributeKeyID(); ?>][treeNodeID]<?php echo $child->getTreeNodeID(); ?>"><?php echo $child->getTreeNodeDisplayName(); ?></label>
</li>
<?php
}
?>
</ul>
<?php
}
?>
</section>
<?php
}
?>


JavaScriptの記述は「すべて」のチェックボックスで他の項目のチェックを付けたり外したりする部分なんで無視してください。
肝心なのはトピックツリーからトピックのIDと表示名を取り出しているところでしょうか。

下記のあたりでトピックツリーの子要素を取り出しています。(たしか)

$node = $tree->getRootTreeNodeObject();
if (is_object($node)) {
$node->populateDirectChildrenOnly();
}


そしてforeachでチェックボックスとして書き出しています。
検索ボタンを押すと選択されたトピックのIDが$selectedNodeに配列で渡されるので、checkedを付けるかどうかの判定に使っています。


<input type="checkbox" class="check-button" id="akID[<?php echo $attributeKey->getAttributeKeyID(); ?>][treeNodeID]<?php echo $child->getTreeNodeID(); ?>" name="akID[<?php echo $attributeKey->getAttributeKeyID(); ?>][treeNodeID][]" value="<?php echo $child->getTreeNodeID(); ?>"/>

添付: sample.png

Re: 検索ブロックの中で表示するトピック属性の見た目をカスタマイズしたい

2017年10月11日 at 14:14
KMiura様

ご返答ありがとうございます。
こちらでも、トピックリストのview.phpを参考にして、直接検索ブロックのview内にトピックの出力を試している所です。
作業落ち着きましたらこちらで共有します。