学习定制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默认文章模板的方法整理》