模板中的Joomla自定义字段

问题描述 投票:4回答:4

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

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

提前致谢。

php joomla
4个回答
6
投票

当然不是正确的方法,但我有同样的需要,我找到了基于https://www.giudansky.com/news/12-coding/146-joomla-custom-fields的工作

从/components/com_content/views/article/tmpl/default.php到模板/ YOUR_THEME / html / com_content / article / default.php的Copie default.php

添加以下代码行25:

$myCustomFields = array();
    foreach($this->item->jcfields as $field) {
        $myCustomFields[$field->name] = $field->value;
    } 

$GLOBALS['myCustomFields'] = $myCustomFields;

通常,您会在全局变量中添加附加到文章的字段内容。在您的模板页面上,您可以知道您的字段的检索值。 just print_r($ GLOBALS ['myCustomFields']);查看数组的内容。

这将成为等待更好答案的诀窍..


6
投票

对于每个迟到的人来说。如果你想在Module-Override中使用自定义表单字段(这实际上是修改j!-templates的唯一方法,那么google'joomla template override')你可以使用这个方便的代码片段:

<?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;
    }
?>

现在您可以使用自定义字段:qazxsw poi

尚未在文章覆盖中进行测试。可能很快,如果是这样,这将得到更新。


3
投票

这绝对是错误的方法,我想,但我撕裂了我的头发所以我想出了这个快速的数据库查询,以返回模板中的自定义字段值。这当然违反了某种joomla协议?很明显,这假设你可以在你的模板中获得$ articleid,这是你文章的当前ID。

我也在等待更好的解决方案,但希望这会有所帮助

itemCustomFields['customFieldName1']

1
投票

我发现最容易理解com_fields在渲染代码中的作用。在Joomla!3.7+中,您可以在[joomla_root] /components/com_fields/layouts/fields/render.php中找到它。

以下是重现Joomla具有的格式所需的主要部分:

$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;

这将循环遍历组件或文章的所有可用标记。这个方法的好处是它仍然应用你在字段中包含的渲染类。

确保将自动显示设置为不自动显示在您的字段上;否则你会在页面视图中看到它们两次。

如果您只想定位要显示的特定字段,可以使用字段的名称来定位它。 (标签和值对位于下方。)有关详细信息,请参阅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>

© www.soinside.com 2019 - 2024. All rights reserved.