Запрет редактирования полей пользователей Joomla 1.7-2.5 с возможностью вывода их пользователю
Ранее я писал про возможность полного сокрытия полей профиля для пользователей Joomla 1.7-2.5. В комментариях попросили рассказать о том, как можно убрать редактирование некоторых полей, но оставить их отображение при просмотре профиля. Как помним — эти поля заполняются при регистрации.
1. Как писал в прошлой статье, правки мы будем делать в скрипте /components/com_users/view/profile/tmpl/edit.php
Для начала найдем цикл
1 | <?php foreach ($fields as $field):// Iterate through the fields in the set and display them.?> |
В нем перебираются наши поля.
Названия всех выводимых полей мы можем найти в файле /components/com_users/models/forms/profile.xml, о котором писал ранее.
2. Нам надо написать код, который будет фильтровать поля и выводить только нужные нам. В качестве небольшого дополнения сделаем еще одну настройку, которая позволит вывести только значение поля в форме редактирования. На некоторых сайтах можно увидеть в таком виде поле «логин», которое невозможно поменять, но можно увидеть в процессе редактирования.
Заменяем кусок кода
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php foreach ($fields as $field): // Iterate through the fields in the set and display them.?> <?php if ($field->hidden):// If the field is hidden, just display the input.?> <?php echo $field->input;?> <?php else:?> <dt> <?php echo $field->label; ?> <?php if (!$field->required && $field->type!='Spacer'): ?> <span class="optional"><?php echo JText::_('COM_USERS_OPTIONAL'); ?></span> <?php endif; ?> </dt> <dd><?php echo $field->input; ?></dd> <?php endif;?> <?php endforeach;?> |
На такой
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php //создаем два массива. Первый - содержит в себе поля, которые будут скрыты $hidefields = array('email1','email2','name'); //второй содержит поля, в которых мы будем выводить только его значение $showvalue = array('email1'); ?> <?php foreach ($fields as $field): // Iterate through the fields in the set and display them.?> <?php $sh = in_array($field->fieldname, $showvalue); //делаем проверку, что имя поле есть в массиве скрытых полей, //и для большей надежности проверяем, чтобы имя этого поля не //было во втором массиве, т.к. при соблюдении условий у нас //идет сброс текущей итерации цикла if(in_array($field->fieldname, $hidefields) && !$sh) continue; ?> <?php if ($field->hidden):// If the field is hidden, just display the input.?> <?php echo $field->input;?> <?php else:?> <dt> <?php echo $field->label; ?> <?php if (!$field->required && $field->type!='Spacer'): ?> <span class="optional"><?php echo JText::_('COM_USERS_OPTIONAL'); ?></span> <?php endif; ?> </dt> <dd> <?php //Здесь мы модифицировали код, чтобы выводить либо форму ввода, либо //просто значение данного поля. if($sh) { echo $field->value; } else { echo $field->input; } ?> </dd> <?php endif;?> <?php endforeach;?> |
3. Если мы скрыли поля, которые должен быть обязательным к заполнению, то нам надо убрать эту проверку, т.к. будет выводиться ошибка. Посмотрим на примере полей email1 и email2. Править будем файл /components/com_users/models/forms/profile.xml.
Находим записи, относящиеся к этим полям.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <field name="email1" type="email" description="COM_USERS_PROFILE_EMAIL1_DESC" filter="string" label="COM_USERS_PROFILE_EMAIL1_LABEL" message="COM_USERS_PROFILE_EMAIL1_MESSAGE" required="true" size="30" unique="true" validate="email" /> <field name="email2" type="email" description="COM_USERS_PROFILE_EMAIL2_DESC" field="email1" filter="string" label="COM_USERS_PROFILE_EMAIL2_LABEL" message="COM_USERS_PROFILE_EMAIL2_MESSAGE" required="true" size="30" validate="equals" /> |
Мы видим в них такие параметры как
required=»true» — обязательный к заполнению
unique=»true» — уникальный
validate=»equals» — проверка на совпадение с другим полем
Все эти параметры мы должны стереть, т.к. при редактировании не передают значения данных полей и будет вызвана ошибка.
В итоге у нас должна получиться такая картина
Комментарии к Запрет редактирования полей пользователей Joomla 1.7-2.5 с возможностью вывода их пользователю (5)
Сергей!
😛 СПАСИБО!!!!
Сергей!
Проверил, работает в 2.5 Спасибо! 😀
Только вот поле required=»true» нужно наверно оставить, а то появляется рядом с названием поля слово «необязательный» 😯
Типа поле-то не редактируемое и одновременно не обязательное 😉
Сергей!
Ну в случае автора «optional» 😎 без него логичнее.
Сергей!
🙁 ай-ай! вот те на! Автор прав! нельзя поле required=»true» оставлять — ошибка вылетает!
Что же делать не хочется там надпись «optional» 🙄
admin Post author
За вывод этой надписи отвечает код
В принципе можно его убрать или поставить нужное условие.
Это в edit.php