gpt4 book ai didi

php - Joomla 输入表单字段输出

转载 作者:可可西里 更新时间:2023-11-01 00:43:51 25 4
gpt4 key购买 nike

我想做的就是为 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;
}

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

但是有一些 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>

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

这是现在的样子:

  <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 代码。或者我需要在没有所有额外内容的情况下加载电子邮件的输入字段,但我不知道该怎么做。

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

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. 我正在通过复制所有文件在我的模板文件夹中创建 com_users-overridejoomla/components/com_users/views/提醒Joomla/templates/MyTemplate/html/com_users/remind

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

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

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

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

  1. 我将 remind.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('电子邮件'); ?>

就这些。

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>

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

关于php - Joomla 输入表单字段输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com