【问题标题】:Joomla input form field outputJoomla 输入表单域输出
【发布时间】:2014-11-08 06:12:00
【问题描述】:

我想做的就是为 joomla 输入表单提供基本的引导样式:

<div class="form-group">
<div class="input-group">
<span class="input-group-addon">some text</span>
<input class="form-control" />

我正在使用带有 less 的 mixin 将样式应用于现有的输入类

//input form fields
.validate-email{
   .form-control;
}

我正在覆盖 com_users/remind.php 以进行其他 html 更改。

但是有一些 php 代码会弄乱输出。这是来自 com_users/remind.php 的原始代码,我将覆盖它:

   <fieldset>
         <?php foreach ($this->form->getFieldset($fieldset->name) as $name => $field) : ?>
            <div class="control-group">
               <div class="control-label">
                  <?php echo $field->label; ?>
               </div>
               <div class="controls">
                  <?php echo $field->input; ?>
               </div>
            </div>
         <?php endforeach; ?>
      </fieldset>

我不需要标签(见上文),所以我删除了这些行。我更改了所有可用的类,并为输入字段类创建了一个 mixin(见上文)。

这就是现在的样子:

  <fieldset>
  <?php foreach ($this->form->getFieldset($fieldset->name) as $name => $field) : ?>
        <div class="form-group">
           <div class="input-group">
              <span class="input-group-addon">E-Mail</span>
              <?php echo $field->input; ?>
           </div>
        </div>
  <?php endforeach; ?>
  </fieldset>

但是该代码中周围的 php 行正在做一些奇怪的事情,我不明白。 输出如下所示:

<fieldset>
                        <div class="form-group">
                    <div class="input-group">
                        <span class="input-group-addon">E-Mail</span>
                        <input type="email" aria-required="true" required="" size="30" value="" id="jform_email" class="validate-email invalid" name="jform[email]" aria-invalid="true">                    </div>
                </div>
                        <div class="form-group">
                    <div class="input-group">
                        <span class="input-group-addon">E-Mail</span>
                                            </div>
                </div>
                </fieldset>

所以第一个表单组 - 输出就是我想要的。第二个表单组 - 输出通常是输入字段的相应标签。我需要摆脱第二个表单域输出。

我不是在做核心黑客,我正在寻找一种方法来覆盖 joomla 输入字段输出。 我不想像文档建议的那样创建自己的表单字段:http://docs.joomla.org/Creating_a_custom_form_field_type

我要么需要摆脱那个“foreach”而不创建任何 php 错误,但我不知道如何更改那个 php 代码。 或者我需要在没有所有额外内容的情况下为电子邮件加载该输入字段,但我不知道该怎么做。

我尝试通过添加来创建自己的字段覆盖

JForm::addFieldPath(JPATH_THEMES . '/MyTemplate/html/fields');

并将remind.php 复制到该文件夹​​。 但它没有加载我的自定义remind.php。 文档提到了覆盖 getLabel

public function getLabel() {
     return '<span style="text-decoration: underline;">' . parent::getLabel() . '</span>';}

但我不知道如何在 getInput 上使用它

如果有人有正确的 php 行或其他更简单的解决方案,请告诉我。我已经试错了一段时间,但我的想法已经不多了。 谢谢,拉斯

【问题讨论】:

  • 您能否更新“第一个表单组 - 输出就像预期的一样,正是我想要的,第二个看起来像这样”部分并添加导出的内容和您的期望?
  • @emmanuel 我改变了那部分。它现在显示整个输出。

标签: php forms joomla


【解决方案1】:

最后我找到了一种添加自定义字段和呈现单个输入字段的方法(感谢 Brian)。这让我可以完全控制 joomla 输入表单字段的输出,它是防更新的,所有文件都在 MyTemplate 文件夹中。基本上它是一个覆盖。我正在展示 Joomla/components/com_users/remind 中的remind.php 的整个过程:

  1. 我正在模板文件夹中创建 com_users-override,方法是从 joomla/components/com_users/views/提醒 Joomla/templates/MyTemplate/html/com_users/remind

  2. 我将这些行添加到remind.php:

    $this-&gt;form-&gt;reset( true ); // 重置视图加载的表单xml

    $this-&gt;form-&gt;loadFile( dirname(__FILE__) . DS . "remind.xml"); // 使用 FILE 常量加载我自己版本的提醒.xml

现在我可以使用同一个文件夹中我自己的remind.xml。

  1. 我将提醒.xml 从 joomla/components/com_users/models/forms 复制到 Joomla/templates/MyTemplate/html/com_users/remind

我在该 xml 中添加以下行:

hint="This is the placeholder-text"
class="form-control"

整个文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<form>
    <fieldset name="default" label="COM_USERS_REMIND_DEFAULT_LABEL">
        <field name="email" type="email"
            hint="My Placeholder"
            class="form-control"
            description="COM_USERS_FIELD_REMIND_EMAIL_DESC"
            label="COM_USERS_FIELD_REMIND_EMAIL_LABEL"
            required="true"
            size="30"
            validate="email"
        />
        <field
            name="captcha"
            type="captcha"
            label="COM_USERS_CAPTCHA_LABEL"
            description="COM_USERS_CAPTCHA_DESC"
            validate="captcha"
        />
    </fieldset>
</form>

当然你可以添加任何你想要的行。

  1. 现在我更改了我的 Joomla/templates/MyTemplate/html/com_users/remind 文件夹中的 default.php。这些是 Brian 建议的类似行(抱歉,代码格式化在这里不起作用):

    电子邮件 表单->getInput('email'); ?>

仅此而已。

html 输出如下所示:

<fieldset>
        <div class="form-group">
            <div class="input-group">
                <span class="input-group-addon">E-Mail</span>
                <input type="email" aria-required="true" required="" placeholder="My Placeholder" size="30" value="" id="jform_email" class="validate-email form-control" name="jform[email]">          </div>
        </div>
        </fieldset>

好的,我知道这篇文章中的代码显示不正确,但我不知道如何修复它,而且我还不允许发布屏幕截图。很抱歉。

【讨论】:

    【解决方案2】:

    如果您想放弃 foreach 循环并手动渲染各个字段,您可以使用直接从 JForm 对象单独渲染字段。

      <fieldset>
         <div class="form-group">
             <div class="input-group">
                <span class="input-group-addon">E-Mail</span>
                <?php echo $this->form->getInput('email'); ?>
             </div>
          </div>
          <div class="form-group">
             <div class="input-group">
                <?php echo $this->form->getInput('captcha'); ?>
             </div>
          </div>
      </fieldset>
    

    【讨论】:

    • 非常感谢,这肯定解决了 foreach 循环的问题。但后来我仍然错过了该输入字段中的占位符属性,我需要创建一个 less-mixin 来添加“表单控制”类。我找到了一种将两个属性添加到输入标签的方法,方法是将我自己的 formfield.xml 添加到相应的 com_users-files 并按照您的建议呈现该字段。我正在尝试为整个覆盖过程编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2023-03-28
    • 2013-12-13
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多