学习定制Yootheme的Joomla默认文章模板的思路和方法

修改前,我们先做子模板覆盖,一般是这样templates/yootheme_MYTEMPLATE/templates/article.php

然后使用安全的方法来确定模板里有哪些变量

<?php
echo '<!-- DEBUG: ';

foreach (get_defined_vars() as $k => $v) {
    echo $k . ', ';
}

echo ' -->';
?>

输出结果:

<!-- DEBUG: __file, __dir, params, article, event, single, link, permalink, title, hits, created, modified, image, images, imageType, layout, childDir, config, tags, icons, readmore, pagination, content, author, published, category, view, app, _root, attrs_container, attrs_image, title_element, attrs_title, attrs_content, attrs_tags, attrs_button, attrs_button_container, imagetpl,  -->

测试自定义字段是否存在并输出它的key

<?php
echo '<!-- JCFIELDS: ' . implode(', ', array_keys((array)$article->jcfields)) . ' -->';
?>

输出结果:

<!-- JCFIELDS: 11 -->

打印出的字段key为11而不是 alias,说明 YOOtheme Pro 文章模板使用的是“数字索引的 jcfields”结构,而不是“alias 作为 key”的结构。

也就是说:

$article->jcfields

实际上是:

$article->jcfields[字段ID]

而不是:

$article->jcfields['toc']

使用自定义字段的ID值来输出字段的方法

<?php
if (!empty($article->jcfields[11])) {
    echo $article->jcfields[11]->value;      // 格式化后的值
    // echo $article->jcfields[11]->rawvalue; // 原始值
}
?>

遍历jcfields,通过alias来输出字段的方法

<?php
if (!empty($article->jcfields)) {
    foreach ($article->jcfields as $field) {
        if ($field->name === 'toc') {   // 这里用 name,比对 alias
            echo $field->value;         // 或 rawvalue
            break;
        }
    }
}
?>

更安全地使用alias来输出字段的方法

<?php
if (!empty($article->jcfields)) :
    foreach ($article->jcfields as $field) :
        if ($field->name === 'toc') : ?>
            <?= $field->value ?>
        <?php
            break;
        endif;
    endforeach;
endif;
?>

如果你需要了解更多关于yootheme的默认文章模的实用技巧,可以阅读这篇文章《定制Yootheme的Joomla默认文章模板的方法整理