Возникла потребность в создании нового типа полей для контента в 2-ке чекбоксы. Думаю для многих это будет очень полезным решением.
У меня есть уже некоторые наработки.
Создал два дополнительных файла в папку system/fields/checkboxe.php
В папку templates/тема/assets/fields/checkbox.tpl.php
В файл system/libs/html.helper.php добавил новую функцию.
В админке новое поле появилось, содержимое появляется и отображается чекбоксами на сайте. Но вот никак не могу найти где ошибся в коде — не добаляет отмеченные записи в базу данных.
Ну а теперь по порядку
Содержимое файла system/fields/checkboxe.php
<?php class fieldCheckboxe extends cmsFormField { public $title = LANG_PARSER_Checkboxe; public $sql = 'int NULL DEFAULT NULL'; public $filter_type = 'int'; public $filter_hint = LANG_PARSER_Checkboxe_FILTER_HINT; public function getOptions(){ 'title' => LANG_PARSER_LIST_FILTER_MULTI, 'default' => false )), ); } public function getFilterInput($value) { $items = $this->getCheckboxeItems(); if (!$this->getOption('filter_multiple')){ return html_checkboxe($this->name, $items, $value); } else { return html_checkboxe($this->name, $items, $value); } } public function getRules() { if($this->item){ } return $this->rules; } public function parse($value){ $items = $this->getCheckboxeItems(); $item = ''; } public function getCheckboxeItems(){ $items = $this->items; $generator = $this->generator; $items = $generator($this->item); } else if ($this->hasDefaultValue()) { $items = $this->parseCheckboxeItems($this->getDefaultValue()); } return $items; } public function parseCheckboxeItems($string){ return string_explode_list($string); } public function applyFilter($model, $value) { if (!$this->getOption('filter_multiple')){ $model->filterEqual($this->name, $value); } else { $model->filterIn($this->name, $value); } return $model; } public function getInput($value){ $this->data['items'] = $this->getCheckboxeItems(); $this->data['is_multiple'] = $this->getProperty('is_multiple'); $this->data['is_tree'] = $this->getProperty('is_tree'); $this->data['parent'] = $this->getProperty('parent'); return parent::getInput($value); } }
<?php if ($field->title) { ?><label for="<?php echo $field->id; ?>"><?php echo $field->title; ?></label><?php } ?> <?php if($field->data['is_multiple']){ echo html_select_multiple($field->element_name, $field->data['items'], $value, $field->data['dom_attr'], $field->data['is_tree']); }else{ echo html_checkboxe($field->element_name, $field->data['items'], $value, $field->data['dom_attr']); } ?>
// Здесь много кратный чекбокс // if ($checked) { $attributes['checked'] = 'checked'; } $attr_str = html_attr_str($attributes); $class = 'input-checkbox'; // $html = '<select name="'.$name.'" '.$attr_str.$class.'>'."\n"; $optgroup = false; foreach($items as $value => $title){ if($optgroup !== false){ $html .= "\t".'</optgroup>'."/n"; $optgroup = false; } $optgroup = true; $html .= "\t".'<optgroup label="'.$title[0].'">'."\n"; continue; } $sel = ((string) $selected === (string) $value) ? 'checked' : ''; //$html .= "\t".'<option value="'.htmlspecialchars($value).'" '.$sel.'>'.htmlspecialchars($title).'</option>'."\n"; $html .= "\t".'<input type="checkbox" class="'.$class.'" name="'
#2
24 декабря 2015 в 12:16
VonKruger, Замените это
на это
так как вы наверняка передаёте в БД не число (int), а нечто другое.
public $title = LANG_PARSER_Checkboxe; public $sql = 'int NULL DEFAULT NULL'; public $filter_type = 'int'; public $filter_hint = LANG_PARSER_Checkboxe_FILTER_HINT;
public $title = LANG_PARSER_Checkboxe; public $sql = 'varchar(64) NULL DEFAULT NULL'; public $filter_type = 'str'; public $filter_hint = LANG_PARSER_Checkboxe_FILTER_HINT;
#3
24 декабря 2015 в 12:48
Здесь все правильно передается число и в базе хранится числом а зничение идентификатора потом выводится на сайте — если ввести вручную в базу данных.
Где-то я напартачил и никак не разберусь. Больше года уже не занимался программированием, были на то обстоятельства и маленько подзабылось уже.
Где-то я напартачил и никак не разберусь. Больше года уже не занимался программированием, были на то обстоятельства и маленько подзабылось уже.
Сегодня в 05:57
#4
24 декабря 2015 в 12:52
Вот вид исходника
Вот сам вид чекбоксов
VonKruger, я вам про то значение, что заносится в БД, а вы мне про то значение, что выводится в шаблоне.
У вас когда вы выбераете чекбоксы — один, три, пять, значение поля checkboxe, чему будет равно? Одной цифре или набору цифр?
У вас когда вы выбераете чекбоксы — один, три, пять, значение поля checkboxe, чему будет равно? Одной цифре или набору цифр?
Одна или набор в зависимоти от выбора. Я так уже менял причина не в этом где-то еще
А в скрнах я визуально показал как это выглядит в исходнике, что в value идет цифра
А в скрнах я визуально показал как это выглядит в исходнике, что в value идет цифра
#7
24 декабря 2015 в 15:15
Записать получилось
Вот что получается
Теперь нужно его распарсить и вывести вот в этом коде
Вот что получается
Теперь нужно его распарсить и вывести вот в этом коде
public function parse($value){ $items = $this->getCheckboxeItems(); $item = ''; }
#8
24 декабря 2015 в 16:09
Все решил проблему.
Так всегда как что-то не получается мучаешься и не получается, создал тему на форуме и получилось.
Всем спасибо за внимание.
Кому нужно данное решение обращайтесь в личку.
Так всегда как что-то не получается мучаешься и не получается, создал тему на форуме и получилось.
Всем спасибо за внимание.
Кому нужно данное решение обращайтесь в личку.