我想做的就是给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
我要么在没有创建任何php错误的情况下摆脱那个“foreach”,但我不知道如何更改该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-lines或其他更简单的解决方案,请告诉我。我已经有一段时间的反复试验了,而且我的想法已经不多了。 谢谢,Lars
答案 0 :(得分:4)
最后,我找到了添加自定义字段和渲染单个输入字段的方法(感谢Brian)。这使我可以完全控制joomla输入表单字段的输出,它是防更新的,所有文件都在MyTemplate文件夹中。基本上它是一个覆盖。我正在展示在Joomla / components / com_users / remind中找到的remind.php的整个过程:
我在模板文件夹中创建了com_users-override,方法是复制所有文件 joomla / components / com_users / views / remind to 的Joomla /模板/ MyTemplate的/ HTML / com_users /提醒
我将这些行添加到remind.php:
$this->form->reset( true );
//重置视图加载的表单xml
$this->form->loadFile( dirname(__FILE__) . DS . "remind.xml");
//使用FILE常量加载我自己的remind.xml版本
现在我可以在同一个文件夹中使用自己的remind.xml。
我在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>
当然你可以添加你想要的任何行。
现在我更改了我的Joomla / templates / MyTemplate / html / com_users / remind - 文件夹中的default.php。这些是Brian建议的类似行(抱歉代码格式化不起作用):
电子邮件 形状配合&GT; getInput( '电子邮件'); ?&GT;多数人。
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>
好的,我知道这篇文章中的代码没有正确显示,但我无法弄清楚如何修复它,我不允许发布截图。对不起。
答案 1 :(得分:1)
如果要放弃foreach循环并手动渲染各个字段,可以使用直接从Form对象单独渲染字段。
<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>