2013-03-04 5 views
1

Я работаю над формой редактирования профиля Joomla. Я хочу изменить используемую разметку, в основном для добавления классов CSS. В принципе очень простые вещи. Дело в том, что поля формы обрабатываются Joomla и приведены в цикле, как это:joomla form markup

<?php foreach($this->form->getFieldsets() as $fieldset):?> 
    <?php $fields = $this->form->getFieldset($fieldset->name);?> 
    <?php foreach($fields as $field):?> 
    <?php echo $field->label; ?> 
    <?php echo $field->input;?> 
    <?php endforeach;?> 
<?php endforeach;?> 

Extensions может добавить свои собственные поля в петлю так входы по умолчанию не может быть жестко закодированы. Например, я не знаю, как добавить класс в метку ввода. Чтобы изменить атрибуты ввода, я попытался использовать JForm::setFieldAttribute, но, похоже, это не имеет никакого эффекта при использовании с переопределением. У кого-нибудь есть подсказки?

+0

Класс должен быть применен в какой-то момент до этого. В противном случае, как этот цикл знает, к каким элементам добавить классы? Где определены элементы формы? – isherwood

+0

@isherwood Это вопрос. Цикл представляет собой упрощенную версию из той, которая включена в K2. Но если я не ошибаюсь, это цикл формы по умолчанию с Joomla 1.6. Все свойства поля ранее определены в файлах xml. Мой вопрос в том, могу ли я изменить их внутри или до цикла, но из этого файла переопределения. – PapayaGiver

ответ

0

Элементы для плагина профиля определены в файле profiles/profile.xml. Чтобы добавить класс к вводу - вы можете сделать одну из двух вещей. Сначала отредактируйте файл xml. Большинство полой формы принимает класс, например, в профиле по умолчанию плагина в

 <field 
      name="address1" 
      type="text" 
      id="address1" 
      description="PLG_USER_PROFILE_FIELD_ADDRESS1_DESC" 
      filter="string" 
      label="PLG_USER_PROFILE_FIELD_ADDRESS1_LABEL" 
      message="PLG_USER_PROFILE_FIELD_ADDRESS1_MESSAGE" 
      size="30" 
      class="custom_class" 
     /> 

Вы можете видеть, что я только что добавил класс до конца. Обратите внимание, что вы также можете включить поля формы без цикла. Для примера см. Компонент weblinks (вид формы). Они делают это так:

 <div class="formelm"> 
      <?php echo $this->form->getLabel('address1'); ?> 
      <?php echo $this->form->getInput('address1'); ?> 
     </div> 

Таким образом, вы можете увидеть address1 это имя поля, как это определено в файле XML - и это просто эхо находится вне соответствующих данных. Это также вполне приемлемый способ добавления класса. Надеюсь, это поможет.

+0

Спасибо за быстрый ответ! Это действительно хорошее решение. Однако нужно знать, какие поля будут. Я работаю над шаблоном, и он должен работать с любым полем, которое добавляется на сайт сторонними расширениями. Так что я хотел бы сделать, это проверить тип поля и соответственно добавить классы. – PapayaGiver

+0

Является ли это решение по существу «основным хаком», которое может быть перезаписано обновлением Joomla? – isherwood

+0

@PapayaGiver Я не думаю, что ваши действия в этом случае поддерживаются. ** Насколько мне известно, это только два способа добавить класс в поле формы. –