web-dev-qa-db-ja.com

フロントエンドの特定の親のネストされたタグのリストをリンクとしてクエリして表示する方法は?

特定の親に一致するタグのリストを生成し、タグのタイトルとIDを持つリンクとしてフロントエンドに表示するために、dbをクエリする最良の方法は何ですか?

これは、「categories」と「collection」という2つのjoomlaタグフィールドを使用するカスタムjoomla mvcコンポーネント用です。

タグのリストを取得したら、jinputを使用してタグIDを変数としてページに返し、コンポーネントリストビューの結果を制限します。

3
user2097091

タグのリストを生成するには、JHelperTagsクラスの getTagTreeArray() メソッドをベースとして使用し、必要に応じて変更します-結果の配列にIDだけでなく、タグ名も付いています。次に、フロントエンドでTagsHelperRouteクラスの getTagRoute() メソッドを使用して、タグリンクを取得できます。

お役に立てれば。

3
Dmitry Rekun
<?php
defined('_JEXEC') or die; // Joomla
$parent_tag_id=12345; // your tag id here
JLoader::register('TagsHelperRoute', JPATH_BASE . '/components/com_tags/helpers/route.php');
$tags_tree=JTable::getInstance('Tag', 'TagsTable')->getTree($parent_tag_id);
// Show children:
foreach($tags_tree as $tags_tree_id=>$tags_tree_item) {
    echo 'DEBUG: ';
    echo ' id:'    . $tags_tree_item->id;
    echo ' level:' . $tags_tree_item->level;
    echo ' path:'  . $tags_tree_item->path;
    $link=TagsHelperRoute::getTagRoute($tags_tree_item->id . ':' . $tags_tree_item->path);
    echo ' link: ' . JRoute::_( $link, true, 1);
    echo '<br>';
}

さらに、すべての親タグをルートから現在の深度レベルに並べ替えるには:

<?php
defined('_JEXEC') or die; // Joomla
$tag_id=12345; // your tag id here
$parent_tags=JTable::getInstance('Tag', 'TagsTable')->getPath($tag_id);
// Show parents and self:
foreach($parent_tags as $parent_tags_id=>$parent_tags_item) {
    echo 'DEBUG: ';
    echo ' id:'        . $parent_tags_item->id;
    echo ' level:'     . $parent_tags_item->level;
    echo ' path:'      . $parent_tags_item->path;
    echo ' published:' . $parent_tags_item-->published;
    echo '<br>';
}

注意:allタグを取得するため、公開されたプロパティをチェックする必要があるかもしれません。 1は公開され、0は非表示、-2はゴミ箱に、2はアーカイブされます。

https://api.joomla.org/cms-3/classes/Joomla.CMS.Router.Route.html もご覧ください。

0
Marcel