web-dev-qa-db-ja.com

どのようにしてオーバーライドすることにより、article-categoryモジュールで親カテゴリのタイトルを表示できますか?

「mod_articles_category/default.php」のオーバーライドを作成して、記事のカテゴリモジュールからのすべての出力をテーブルの行に取得します。これはこれまでのところうまくいき、選択された3つの列「タイトル」、「カテゴリ」、「日付」を表示しています。

ここで、別の列「親カテゴリ」を追加する必要があります。リストされた記事の親カテゴリはどこで/どのように取得できますか?

この記事 は、よく似た問題(Joomla 3.3)に対して次のコードを提案しました。

<?php
$db = JFactory::getDbo();
$id = $item->core_catid;
$db->setQuery("SELECT cat.parent_id FROM #__categories cat WHERE cat.id='$id'");
$parent_category_id = $db->loadResult();
$db->setQuery("SELECT cat.title FROM #__categories cat WHERE cat.id='$parent_category_id'");
$parent_category_title = $db->loadResult();
if($parent_category_title != 'ROOT'){
 echo '<p>Parent Category: '.$parent_category_title.'</p>';
}
echo '<p>Parent Category: <a href="index.php?option=com_content&view=category&layout=blog&id='.$parent_category_id.'">'.$parent_category_title.'</a></p>';
?>

しかし、このコードは私にとっては機能しません(Joomla 3.4.8)。$ parent_category_titleに対して何も返されません。ここで何が問題になっていますか?

また、私のソリューションが最終的にどのようにクリーンになるかはわかりませんが、オーバーライドは次のようになります。

<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_articles_category
 *
 * @copyright   Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

?>

<table class="category-module<?php echo $moduleclass_sfx; ?>">
    <?php if ($grouped) : ?>
        <?php foreach ($list as $group_name => $group) : ?>
        <tr><td>
            <div class="mod-articles-category-group"><?php echo $group_name;?></div>
            <table>
                <?php foreach ($group as $item) : ?>
                    <tr>
                        <?php if ($params->get('link_titles') == 1) : ?>
                            <td><a class="mod-articles-category-title <?php echo $item->active; ?>" href="<?php echo $item->link; ?>">
                                <?php echo $item->title; ?>
                            </a></td>
                        <?php else : ?>
                            <td><?php echo $item->title; ?></td>
                        <?php endif; ?>


                        <?php if ($item->displayHits) : ?>
                            <td><span class="mod-articles-category-hits">
                                (<?php echo $item->displayHits; ?>)
                            </span></td>
                        <?php endif; ?>

                        <?php if ($params->get('show_author')) : ?>
                            <td><span class="mod-articles-category-writtenby">
                                <?php echo $item->displayAuthorName; ?>
                            </span></td>
                        <?php endif;?>

                        <?php if ($item->displayCategoryTitle) : ?>
                            <td><span class="mod-articles-category-category">
                                <?php echo strip_tags($item->displayCategoryTitle); ?>
                                </span>
                            </td>
                            <td>
                                <?php
                                    $db = JFactory::getDbo();
                                    $id = $item->core_catid;
                                    $db->setQuery("SELECT cat.parent_id FROM #__categories cat WHERE cat.id='$id'");
                                    $parent_category_id = $db->loadResult();
                                    $db->setQuery("SELECT cat.title FROM #__categories cat WHERE cat.id='$parent_category_id'");
                                    $parent_category_title = $db->loadResult();
                                    if($parent_category_title != 'ROOT'){
                                     echo '<span>'.$parent_category_title.'</span>';
                                    }
                                    ?>

                            </td>
                        <?php endif; ?>

                        <?php if ($item->displayDate) : ?>
                            <td><span class="mod-articles-category-date"><?php echo $item->displayDate; ?></span>
                        <?php endif; ?>

                        <?php if ($params->get('show_introtext')) : ?>
                            <td><p class="mod-articles-category-introtext">
                                <?php echo $item->displayIntrotext; ?>
                            </p></td>
                        <?php endif; ?>

                        <?php if ($params->get('show_readmore')) : ?>
                            <td><p class="mod-articles-category-readmore">
                                <a class="mod-articles-category-title <?php echo $item->active; ?>" href="<?php echo $item->link; ?>">
                                    <?php if ($item->params->get('access-view') == false) : ?>
                                        <?php echo JText::_('MOD_ARTICLES_CATEGORY_REGISTER_TO_READ_MORE'); ?>
                                    <?php elseif ($readmore = $item->alternative_readmore) : ?>
                                        <?php echo $readmore; ?>
                                        <?php echo JHtml::_('string.truncate', $item->title, $params->get('readmore_limit')); ?>
                                            <?php if ($params->get('show_readmore_title', 0) != 0) : ?>
                                                <?php echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); ?>
                                            <?php endif; ?>
                                    <?php elseif ($params->get('show_readmore_title', 0) == 0) : ?>
                                        <?php echo JText::sprintf('MOD_ARTICLES_CATEGORY_READ_MORE_TITLE'); ?>
                                    <?php else : ?>
                                        <?php echo JText::_('MOD_ARTICLES_CATEGORY_READ_MORE'); ?>
                                        <?php echo JHtml::_('string.truncate', ($item->title), $params->get('readmore_limit')); ?>
                                    <?php endif; ?>
                                </a>
                            </p></td>
                        <?php endif; ?>
                    </tr>
                <?php endforeach; ?>
            </table>
        </tr>
        <?php endforeach; ?>
    <?php else : ?>
        <?php foreach ($list as $item) : ?>
            <tr>
                <?php if ($params->get('link_titles') == 1) : ?>
                    <td><a class="mod-articles-category-title <?php echo $item->active; ?>" href="<?php echo $item->link; ?>">
                        <?php echo $item->title; ?>
                    </a></td>
                <?php else : ?>
                    <td><?php echo $item->title; ?>
                <?php endif; ?>

                <?php if ($item->displayHits) : ?>
                    <td><span class="mod-articles-category-hits">
                        (<?php echo $item->displayHits; ?>)
                    </span></td>
                <?php endif; ?>

                <?php if ($params->get('show_author')) : ?>
                    <td><span class="mod-articles-category-writtenby">
                        <?php echo $item->displayAuthorName; ?>
                    </span></td>
                <?php endif;?>

                <?php if ($item->displayCategoryTitle) : ?>
                    <td><span class="mod-articles-category-category">
                        <?php echo $item->displayCategoryTitle; ?>
                    </span></td>
                <?php endif; ?>

                <?php if ($item->displayDate) : ?>
                    <td><span class="mod-articles-category-date">
                        <?php echo $item->displayDate; ?>
                    </span></td>
                <?php endif; ?>

                <?php if ($params->get('show_introtext')) : ?>
                    <td><p class="mod-articles-category-introtext">
                        <?php echo $item->displayIntrotext; ?>
                    </p></td>
                <?php endif; ?>

                <?php if ($params->get('show_readmore')) : ?>
                    <td><p class="mod-articles-category-readmore">
                        <a class="mod-articles-category-title <?php echo $item->active; ?>" href="<?php echo $item->link; ?>">
                            <?php if ($item->params->get('access-view') == false) : ?>
                                <?php echo JText::_('MOD_ARTICLES_CATEGORY_REGISTER_TO_READ_MORE'); ?>
                            <?php elseif ($readmore = $item->alternative_readmore) : ?>
                                <?php echo $readmore; ?>
                                <?php echo JHtml::_('string.truncate', $item->title, $params->get('readmore_limit')); ?>
                            <?php elseif ($params->get('show_readmore_title', 0) == 0) : ?>
                                <?php echo JText::sprintf('MOD_ARTICLES_CATEGORY_READ_MORE_TITLE'); ?>
                            <?php else : ?>
                                <?php echo JText::_('MOD_ARTICLES_CATEGORY_READ_MORE'); ?>
                                <?php echo JHtml::_('string.truncate', $item->title, $params->get('readmore_limit')); ?>
                            <?php endif; ?>
                        </a>
                    </p></td>
                <?php endif; ?>
            </tr>
        <?php endforeach; ?>
    <?php endif; ?>
</table>

前もって感謝します!

1
The D

はい、ようやくそれを理解することができました。 "cat.id"や "cat.title"などの他の記事の変数と構文がなぜそれほど異なるのかはわかりませんが、私の環境では実際には機能しませんでした。 Joomla 3.4.8で私のために働いた解決策は次のとおりです:

    $db = JFactory::getDbo();
    $title = strip_tags($item->displayCategoryTitle);
    $language = $item->language;

    $query = $db->getQuery(true);

    $query->select($db->quoteName('parent_id'));
    $query->from($db->quoteName('#__categories'));
    $query->where($db->quoteName('title')."=".$db->quote($title).' AND '.$db->quoteName('language')."=".$db->quote($language));

    $db->setQuery($query);

    $parentId = $db->loadResult();

    $query = $db->getQuery(true);

    $query->select($db->quoteName('title'));
    $query->from($db->quoteName('#__categories'));
    $query->where($db->quoteName('id')."=".$db->quote($parentId));

    $db->setQuery($query);

    $result = $db->loadResult();

    echo $result;
0
The D