模板中的Joomla自定义字段

时间:2017-05-11 08:49:23

标签: php joomla

我想为Joomla 3.7自定义我的模板,以便我可以使用Joomla 3.7的新功能,自定义字段(com_fields),并在我需要显示它们的模板中通过CSS显示和格式化它们。

有人可以建议我在模板中使用的PHP代码来显示字段,请举例说明。

提前致谢。

4 个答案:

答案 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