Перейти к содержанию
  • записи
    4
  • комментариев
    7
  • просмотра
    274

Простое подключение элементов формы

SooR

108 просмотров

Пишете модули с большими формами настроек и заколебались копипастить их элементы?

Для себя нашел простое и правильное (на мой взгляд) решение, которое не требует говнокодить шаблонами в php.

 

Шаблон необходимого элемента. Например, это типичный флаг конфига (1/0).

admin/view/template/extension/module/my_module_pro_control_bool.tpl

<?php if ($true) { ?>
<label class="btn btn-default active">
  <input type="radio" name="<?php echo $name; ?>" value="1" checked="checked" /> <?php echo $text_true; ?>
</label>
<label class="btn btn-default">
  <input type="radio" name="<?php echo $name; ?>" value="0" /> <?php echo $text_false; ?>
</label>
<?php } else { ?>
<label class="btn btn-default">
  <input type="radio" name="<?php echo $name; ?>" value="1" /> <?php echo $text_true; ?>
</label>
<label class="btn btn-default active">
  <input type="radio" name="<?php echo $name; ?>" value="0" checked="checked" /> <?php echo $text_false; ?>
</label>
<?php } ?>

Рендерить и выводить этот шаблон мы будем с помощью PHP замыканий.

Данный код можно поместить в контроллер модуля или другое место с вашими helper методами.

admin/controller/extension/module/my_module_pro.php

public function getBoolControl($template, $language_path) {
  $language = $this->load->language($language_path);

  return function($name, $status, $text_mode = 'e/d') use($template, $language) {
    $data = array();

    if ($text_mode == 'e/d') {
      $data['text_true'] = $language['text_enabled'];
      $data['text_false'] = $language['text_disabled'];
    } else if ($text_mode == 'y/n') {
      $data['text_true'] = $language['text_yes'];
      $data['text_false'] = $language['text_no'];
    }

    $data['name'] = $name;
    $data['true'] = $status;

    if (version_compare(VERSION, '2.2', '<') == true) {
       $template .= '.tpl';
    }

    echo $this->load->view($template, $data);
  };
}

Присваиваем результат метода getBoolControl (то есть анонимную функцию) переменной контроллера для вывода в шаблон

$data['control_bool'] = $this->getBoolControl('extension/module/my_module_pro_control_bool', 'extension/module/my_module_pro');

Осталось использовать это в шаблоне формы

admin/view/template/extension/module/my_module_pro.tpl

<div class="form-group">
  <label class="col-sm-3 control-label"><?php echo $entry_status; ?></label>
  <div class="col-sm-9">
    <div class="btn-group" data-toggle="buttons">
      <?php $control_bool('status', $status, 'e/d'); ?>
    </div>
  </div>
</div><!-- /.form-group -->

Вот и все. 

При желании можно расширить метод, сделать его универсальным либо разбить на части с разными элементами формы.

 

Вот так можно выводить элементы переключателей:

<div class="btn-group" data-toggle="buttons">
  <?php $control_radio('some_radio_group', $some_radio_group, [
    [ 'btn' => 'default', 'icon' => 'fa-sort-alpha-asc',   'value' => 'alpha',    'text' => $text_alpha ],
    [ 'btn' => 'primary', 'icon' => 'fa-sort-amount-desc', 'value' => 'amount',   'text' => $text_amount ],
    [ 'btn' => 'danger',  'icon' => 'fa-sort-numeric-asc', 'value' => 'numeric',  'text' => $text_numeric ],
  ]); ?>
</div>

 

  • +1 6


0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.