我想为Joomla 3.7自定义我的模板,以便我可以使用Joomla 3.7的新功能,自定义字段(com_fields),并在我需要显示它们的模板中通过CSS显示和格式化它们。
有人可以建议我在模板中使用的PHP代码来显示字段,请举例说明。
提前致谢。
答案 0 :(得分:6)
肯定不是正确的方法,但我有同样的需求,我找到了一个基于https://www.giudansky.com/news/12-coding/146-joomla-custom-fields的工作
从/components/com_content/views/article/tmpl/default.php复制default.php到 模板/ YOUR_THEME / HTML / com_content /条/如default.php
添加以下代码第25行:
$myCustomFields = array();
foreach($this->item->jcfields as $field) {
$myCustomFields[$field->name] = $field->value;
}
$GLOBALS['myCustomFields'] = $myCustomFields;
通常,您会在全局变量中添加附加到文章的字段内容。 在您的模板页面上,您可以知道您的字段的检索值。 just print_r($ GLOBALS [' myCustomFields']);查看数组的内容。
这样做会等待更好的答案..
答案 1 :(得分:6)
每个人都迟到了。如果您想在模块覆盖中使用自定义表单字段(这实际上是修改j!-templates的唯一方法,那么google&#39; joomla模板覆盖&#39;)您可以使用这个方便的代码段:< / p>
<?php
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
$jcFields = FieldsHelper::getFields('com_content.article', $item, true);
$itemCustomFields = array();
foreach($jcFields as $field) {
$itemCustomFields[$field->name] = $field->rawvalue;
}
?>
现在,您可以使用自定义字段:itemCustomFields['customFieldName1']
Haven在文章覆盖中进行了测试。可能很快,如果是这样,这将会更新。
答案 2 :(得分:3)
这绝对是错误的方法,我想,但我正在撕裂我的头发,所以我想出了这个快速的数据库查询,以返回模板中的自定义字段值。这当然违反了某种joomla协议? 显然,这假设你可以在你的模板中获得$ articleid,这是你文章的当前ID。
我也在等待更好的解决方案,但希望这会有所帮助
$db =& JFactory::getDBO();
$sql = "select * from #__fields_values where `item_id` = $articleid";
$db->setQuery($sql);
$fieldslist = $db->loadObjectList();
echo $fieldslist[0]->value;
echo $fieldslist[1]->value;
echo $fieldslist[your field ID here]->value;
答案 3 :(得分:1)
我发现最容易理解com_fields在渲染代码中的作用。在Joomla!3.7+中,您可以在 [joomla_root] /components/com_fields/layouts/fields/render.php 中找到它。
以下是重现Joomla所具有的格式所需的主要部分:
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
<dl class="fields-container">
<?php foreach ($this->item->jcfields as $field) : ?>
<?php // If the value is empty do nothing ?>
<?php if (!isset($field->value) || $field->value == '') : ?>
<?php continue; ?>
<?php endif; ?>
<?php $class = $field->params->get('render_class'); ?>
<dd class="field-entry <?php echo $class; ?>">
<?php echo FieldsHelper::render($context, 'field.render', array('field' => $field)); ?>
</dd>
<?php endforeach; ?>
</dl>
循环遍历组件或文章的所有可用标记。这个方法的好处是它仍然应用你在字段中包含的渲染类。
确保在字段中将自动显示设置为不自动显示;否则你会在页面视图中看到它们两次。
如果您只想定位要显示的特定字段,可以使用字段名称来定位它。 (标签和值对位于下方。)有关详细信息,请参阅the field Joomla docs。