Joomla поля ввода формы вывода

Все, что я хочу сделать, это дать формам ввода joomla базовый стиль начальной загрузки:

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

Я использую миксин с меньшим количеством, чтобы применить стили к существующему классу ввода

//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>

Мне не нужна метка (см. Выше), поэтому я удалил эти строки. Я изменил все доступные классы и сделал миксин для поля ввода (см. Выше).

Вот как это выглядит сейчас:

  <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>

Итак, первая группа форм — вывод — это то, что я хочу. Вторая группа форм — output обычно является соответствующей меткой для поля ввода. Мне нужно избавиться от этого второго вывода поля формы.

Я не занимаюсь хакингом ядра, я ищу способ переопределить вывод поля ввода 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-линии или другое более простое решение, пожалуйста, дайте мне знать. Я был на проб и ошибок некоторое время, и у меня заканчиваются идеи.
Спасибо ларс

3

Решение

Наконец, я нашел способ добавить пользовательские поля и визуализировать отдельные поля ввода (спасибо Брайану). Это дает мне полный контроль над выводом полей формы ввода joomla, он защищен от обновления и все файлы находятся в папке MyTemplate. В основном это переопределение. Я показываю весь процесс для remind.php, найденного в Joomla / components / com_users / remind:

  1. Я создаю com_users-override в моей папке-шаблоне, копируя все файлы из
    joomla / components / com_users / views / напомнить
    Joomla / шаблоны / MyTemplate / html / com_users / напомнить

  2. Я добавляю эти строки в remind.php:

    $this->form->reset( true ); // сбросить форму xml, загруженную представлением

    $this->form->loadFile( dirname(__FILE__) . DS . "remind.xml"); // загрузить мою собственную версию remind.xml, используя константу FILE

Теперь я могу использовать свой собственный 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. Теперь я изменяю default.php в моей папке Joomla / templates / MyTemplate / html / com_users / remind -. Это те же строки, которые предлагает Брайан (извините, форматирование здесь не работает):

    Эл. почта
    форма-> 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>

Хорошо, я знаю, что в этом посте есть код, который не отображается должным образом, но я не могу понять, как это исправить, и мне пока не разрешено публиковать скриншоты. Простите за это.

4

Другие решения

Если вы хотите отказаться от цикла 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>
1

По вопросам рекламы [email protected]