【问题标题】:joomla form markupjoomla 表单标记
【发布时间】:2013-02-18 20:22:05
【问题描述】:

我正在处理 Joomla 个人资料编辑表单。我想做的是更改使用的标记,主要是添加 CSS 类。基本上很简单的东西。问题是,表单字段由 Joomla 处理并在这样的循环中给出:

<?php foreach($this->form->getFieldsets() as $fieldset):?>
  <?php $fields = $this->form->getFieldset($fieldset->name);?>
  <?php foreach($fields as $field):?>
    <?php echo $field->label; ?>
    <?php echo $field->input;?>
  <?php endforeach;?>
<?php endforeach;?>

扩展可能会将自己的字段添加到循环中,因此无法对默认输入进行硬编码。例如,我不知道如何将类添加到输入的标签中。要更改输入属性,我尝试使用JForm::setFieldAttribute,但从覆盖中使用它似乎没有任何效果。有人有什么建议吗?

【问题讨论】:

  • 该类必须在此之前的某个时间点应用。否则,这个循环如何知道要向哪些元素添加类?表单元素在哪里定义?
  • @isherwood 这就是问题所在。该循环是 K2 中包含的循环的简化版本。但如果我没记错的话,它是自 Joomla 1.6 以来的默认表单循环。所有字段属性都先前在 xml 文件中定义。我的问题是我是否可以在循环内部或之前修改它们,但是从这个覆盖文件中。

标签: php joomla


【解决方案1】:

配置文件插件的元素在profiles/profile.xml 文件中定义。要将类添加到输入 - 您可以执行以下两项操作之一。首先编辑xml文件。大多数表单字段都接受一个类,例如在默认配置文件插件中

        <field
            name="address1"
            type="text"
            id="address1"
            description="PLG_USER_PROFILE_FIELD_ADDRESS1_DESC"
            filter="string"
            label="PLG_USER_PROFILE_FIELD_ADDRESS1_LABEL"
            message="PLG_USER_PROFILE_FIELD_ADDRESS1_MESSAGE"
            size="30"
            class="custom_class"
        />

您可以看到我刚刚在末尾添加了类。请注意,您还可以包含没有循环的表单字段。有关此示例,请参阅 weblinks 组件(表单视图)。他们这样做:

        <div class="formelm">
            <?php echo $this->form->getLabel('address1'); ?>
            <?php echo $this->form->getInput('address1'); ?>
        </div>

所以您可以看到address1 是xml 文件中定义的字段的名称——这只是回显了相关数据。这也是一种完全可以接受的添加类的方式。 希望这会有所帮助。

【讨论】:

  • 感谢您的快速回答!这实际上是一个很好的解决方案。但是,需要知道这些字段将是什么。我正在开发一个模板,它应该适用于第三方扩展添加到网站的任何字段。所以我想做的是检查字段的类型并相应地添加类。
  • 这个解决方案本质上是一个“核心黑客”,可能会被 Joomla 更新覆盖吗?
  • @PapayaGiver 我不认为在这种情况下你的行为是原生支持的。 据我所知这是向表单字段添加类的唯一两种方法。
  • @isherwood 是的,这在某种程度上是一个核心黑客——配置文件插件旨在适应任何情况——超过 50% 的时间你会发现人们复制插件和其中的所有文件到一个新的名称/文件夹,然后将其与插件一起使用,然后使用新的名称/文件夹等-它将不再被 Joomla 覆盖!更新。如果您只是编辑现有的 Joomla!插件原样 - 然后是的,它将被 Joomla 覆盖!更新
  • 我刚刚找到了解决方案:&lt;?php $this-&gt;form-&gt;setFieldAttribute(str_replace('jform_','',$field-&gt;id),'class','myclass'); ?&gt;。这使您可以在循环内添加一个类。对于标签,一些正则表达式就可以了。我之前的问题是我没有去掉 jform_ 前缀。
猜你喜欢
  • 1970-01-01
  • 2013-06-15
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
相关资源
最近更新 更多