繁体   English   中英

Joomla输入表单字段输出

[英]Joomla input form field output

我想做的就是给joomla输入表单提供基本的bootstrap样式:

<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代码。 或者我需要为E-Mails加载那个输入字段而没有所有额外的东西,但我不知道该怎么做。

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

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行或其他更简单的解决方案,请告诉我。 我已经有一段时间的反复试验了,而且我的想法已经不多了。 谢谢,拉尔斯

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

  1. 我通过将所有文件从joomla / components / com_users / views / remind复制到Joomla / templates / MyTemplate / html / com_users / remind,在我的template-folder中创建com_users-override

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

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

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

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

  1. 我将remom.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>

好的,我知道这篇文章中的代码没有正确显示,但我无法弄清楚如何修复它,我不允许发布截图。 对不起。

如果要放弃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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM