На странице Регистрации изменить вывод Группы

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X

заменить select на checkbox

#1 15 ноября 2019 в 13:53
Если указать Группе пользователей "Разрешить вступление при регистрации",
то при Регистрации выбор группы выводиться как select (выпадающий список),
а как его заменить на checkbox ?

Пожалуйста по возможности напишите код и куда его вставить, так как я еще плохо знаю движок.
#2 15 ноября 2019 в 23:36

Если указать Группе пользователей "Разрешить вступление при регистрации",
то при Регистрации выбор группы выводиться как select (выпадающий список),
а как его заменить на checkbox ?

@Aleksey24
скорее заменить на checkbox radio (без множественного выбора)

но так такового в системе radio нет, есть select с возможностью включить checkbox но только в множественном варианте, для выбора группы вариант не пойдёт, есть флаг но без передачи массива значений

по этому:
создать файл в \system\fields с именем radio.php со следующим содержимым (это копия list.php с удалёнными данными на глазок):
  1.  
  2. <?php
  3. class fieldRadio extends cmsFormField {
  4.  
  5. public $title = 'Радио список';
  6. public $sql = 'int NULL DEFAULT NULL';
  7. public $filter_type = 'int';
  8. public $filter_hint = LANG_PARSER_LIST_FILTER_HINT;
  9. public $var_type = 'string';
  10. public $native_tag = false;
  11. public $dynamic_list = false;
  12.  
  13. public function getOptions(){
  14. return array();
  15. }
  16.  
  17. public function getFilterInput($value) {
  18.  
  19. $items = $this->getListItems(false);
  20. return html_select($this->name, $items, $value);
  21.  
  22. }
  23.  
  24. public function getRules() {
  25.  
  26. if($this->item){
  27. $this->rules[] = array('array_key', $this->getListItems());
  28. }
  29.  
  30. return $this->rules;
  31.  
  32. }
  33.  
  34. public function getStringValue($value){
  35.  
  36. $items = $this->getListItems();
  37. $item = array();
  38.  
  39. if(!is_array($value)){
  40. $value = array($value);
  41. }
  42.  
  43. foreach ($value as $val) {
  44. if (isset($items[$val])) { $item[] = $items[$val]; }
  45. }
  46.  
  47. return implode(', ', $item);
  48.  
  49. }
  50.  
  51. public function parse($value){
  52.  
  53. $items = $this->getListItems();
  54. $item = '';
  55.  
  56. if (isset($items[$value])) { $item = $items[$value]; }
  57.  
  58. return html($item, false);
  59.  
  60. }
  61.  
  62. public function getListItems($show_empty_value = true){
  63.  
  64. $items = array();
  65.  
  66. if (isset($this->items)){
  67.  
  68. $items = $this->items;
  69.  
  70. } else if (isset($this->generator)) {
  71.  
  72. $generator = $this->generator;
  73. $items = $generator($this->item);
  74.  
  75. } else if ($this->hasDefaultValue()) {
  76.  
  77. $items = ($show_empty_value ? array('' => '') : array()) + $this->parseListItems($this->getDefaultValue());
  78.  
  79. }
  80.  
  81. return $items;
  82.  
  83. }
  84.  
  85. public function getListValuesItems(){
  86.  
  87. $items = array();
  88.  
  89. if (isset($this->value_items)){
  90.  
  91. $items = $this->value_items;
  92.  
  93. } else if (isset($this->values_generator)) {
  94.  
  95. $generator = $this->values_generator;
  96. $items = $generator($this->item);
  97.  
  98. }
  99.  
  100. return $items;
  101.  
  102. }
  103.  
  104. public function parseListItems($string){
  105. return string_explode_list($string);
  106. }
  107.  
  108. public function getDefaultVarType($is_filter=false) {
  109.  
  110. return parent::getDefaultVarType($is_filter);
  111.  
  112. }
  113.  
  114. public function applyFilter($model, $value) {
  115.  
  116. if (!is_array($value)){
  117.  
  118. return $model->filterEqual($this->name, $value);
  119.  
  120. } else {
  121.  
  122. return $model->filterIn($this->name, $value);
  123.  
  124. }
  125.  
  126. }
  127.  
  128. public function getInput($value){
  129.  
  130. if($this->getDefaultVarType() === 'array' && $value && !is_array($value)){
  131. $value = cmsModel::yamlToArray($value);
  132. }
  133.  
  134. $this->data['items'] = $this->getListItems();
  135. $this->data['dom_attr'] = array('id' => $this->id);
  136. $this->data['is_ns_value_items'] = false;
  137.  
  138. if($this->dynamic_list){
  139. $this->data['value_items'] = $this->getListValuesItems();
  140. $first_value_item = reset($this->data['value_items']);
  141. $this->data['is_ns_value_items'] = is_array($first_value_item);
  142. $this->class = 'list_dynamic';
  143. if(!$value){ $value = new stdClass(); }
  144. if(!isset($this->multiple_keys)){ $this->multiple_keys = new stdClass(); }
  145. }
  146.  
  147. return parent::getInput($value);
  148.  
  149. }
  150.  
  151. }
  152.  
в папке \templates\default\assets\fields\ создать файл radio.tpl.php со следующим содержимым
  1.  
  2. <?php if ($field->title) { ?><label for="<?php echo $field->id; ?>"><?php echo $field->title; ?></label><?php } ?>
  3. <?php
  4. foreach ($field->data['items'] as $key => $val) {
  5. $checked = false;
  6. if($key == $value) {$checked = true;}
  7. echo html_radio($field->element_name, $checked, $key, $field->data['dom_attr']).''.$val.'<br>';
  8. }
  9. ?>
  10.  
далее открыть \system\controllers\auth\frontend.php найти участок в коде отмеченный на скриншоте

заменить fieldList на fieldRadio, что бы получилось так


и будет в итоге так
#3 16 ноября 2019 в 01:48
Ура ))) работает
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.