Iceman
Или лыжи плох едут или даже не знаю😊
Попробовал заменить на написанное Вами, но все равно фильтр не работает, ничего не возвращает. Сейчас поле выглядит так (заменил дополнительно getFilterInput что бы нормально выводилось после применения фильтра и перенес в него функцию html_list_multiple):
<?php class fieldSelectMulti extends cmsFormField { public $title = "Select Multiple"; public $sql = 'varchar(64) NULL DEFAULT NULL'; public $allow_index = true; public $filter_type = 'str'; $attr_str = html_attr_str($attributes); $html = '<select name="'.$name.'" '.$attr_str.'>'."\n"; foreach ($items as $value=>$title){ if ($selected == $value) { $sel = 'selected'; } else { $sel = ''; } $html .= "\t" . '<option value="'.htmlspecialchars($value).'" '.$sel.'>'.htmlspecialchars($title).'</option>' . "\n"; } $html .= '</select>'."\n"; return $html; } public function getFilterInput($value) { $items = $this->getListItems(); return $this->html_list_multiple($this->name, $items, $value); } public function getRules() { if($this->item){ } return $this->rules; } public function parse($value){ if (!$value) { return LANG_NO; } $items = $this->getListItems(); $html = ''; if ($items) { $pos = 0; $html .= '<ul>'; foreach($items as $key => $item){ } $pos++; } $html .= '</ul>'; } return $html; } public function getListItems(){ $items = $this->items; $generator = $this->generator; $items = $generator($this->item); } else if ($this->hasDefaultValue()) { $items = $this->parseListItems($this->getDefaultValue()); } return $items; } public function parseListItems($string){ return string_explode_list($string); } public function parseValue($values){ if (!$values) { return false; } $items = $this->getListItems(); $value = ''; if ($items){ foreach($items as $key => $title){ } } return $value; } public function store($value, $is_submitted, $old_value=null){ $value = $this->parseValue($value); return ""; } return $value; } public function applyFilter($model, $value) { $model->filterLike($this->name, $value); return $model; } }
Iceman, я бы избавился от кода который в libs/html.helper.php и перенёс его в файл поля. Это избавит вас от рутины при обновлении движка и этого файла. В итоге у вас получится свой тип поля независимый от изменения файлов движка.
С этим согласен, перенесу. Но все же главный вопрос остался не решенным, как сделать, что бы это поле функционировало, куда копать? :)
в system/fields/selectmulti.php:
<?php class fieldSelectMulti extends cmsFormField { public $title = "Select Multiple"; public $sql = 'varchar(64) NULL DEFAULT NULL'; public $allow_index = true; public $filter_type = 'str'; public function getFilterInput($value) { $items = $this->getListItems(); return html_list_multiple($this->name, $items, $value); } public function getRules() { if($this->item){ } return $this->rules; } public function parse($value){ if (!$value) { return LANG_NO; } $items = $this->getListItems(); $html = ''; if ($items) { $pos = 0; $html .= '<ul>'; foreach($items as $key => $item){ } $pos++; } $html .= '</ul>'; } return $html; } public function getListItems(){ $items = $this->items; $generator = $this->generator; $items = $generator($this->item); } else if ($this->hasDefaultValue()) { $items = $this->parseListItems($this->getDefaultValue()); } return $items; } public function parseListItems($string){ return string_explode_list($string); } public function parseValue($values){ if (!$values) { return false; } $items = $this->getListItems(); $value = ''; if ($items){ foreach($items as $key => $title){ } } return $value; } public function store($value, $is_submitted, $old_value=null){ $value = $this->parseValue($value); return ""; } return $value; } public function applyFilter($model, $values) { $filter = $this->parseValue($values); $model->filterLike($this->name, $filter); return $model; } }
<?php if ($field->title) { ?><label for="<?php echo $field->id; ?>"><?php echo $field->title; ?></label><?php } ?> <?php $users_model = cmsCore::getModel('users'); $items = $field->getListItems(); if ($value) { $pos = 0; foreach($items as $key => $title){ $selected[] = $key; } $pos++; } } else { $selected = $value; } }
И в libs/html.helper.php:
$attr_str = html_attr_str($attributes); $html = '<select multiple name="'.$name.'" '.$attr_str.'>'."\n".'<option></option>'."\n"; foreach ($items as $value=>$title){ if ($selected == $value) { $sel = 'selected'; } else { $sel = ''; } $html .= "\t" . '<option value="'.htmlspecialchars($value).'" '.$sel.'>'.htmlspecialchars($title).'</option>' . "\n"; } $html .= '</select>'."\n"; return $html; }
Iceman, за вывод в фильтре по моему отвечает функция — public function getFilterInput($value) в файлах \system\fields\list.php и \system\fields\listbitmask.php (второй вроде за мультиселект отвечает).
В вашем html_list_multiple я не увидел слова multiple, ни в коде, ни в передаваемых атрибутах. Возможно с этим связана его неработоспособность.
Насколько смог понять я, именно getFilterInput($value) в указанных Вами файлах и отвечает за вывод, а applyFilter($model, $value) собственно за обработку фильтра. В новом поле вне зависимости от того в какой вид я его привожу (как в listbitmask.php или как в list.php) фильтр работать отказывается.
С multiple я знаком, в html_list_multiple его нет потому, что мне нужен в фильтре простой список, с единственным возможным вариант выбора, возможность выбора нескольких значений нужна только в момент создания/изменения записи. В любом случае установка этого атрибута картину все равно не меняет, фильтр по этому полю работать не начинает.
А можете немного подробнее пояснить?
Простой заменой одного файла на другой ничего не выйдет.
Если просто поменять все такие списки в нужный вам вид, то достаточно внести правки в файл \system\libs\html.helper.php строка где-то 551
или поправить файл вашего шаблона templates\вашшаблон\assets\fields\listmultiple.tpl.php где вместо
вставить свою похожую функцию или код самого селекта.
Что касается вывода только в фильтре, то лучше сделать копию поля listmultiple с нужным видом и в нужных типах контента установить тип этого поля вместо стандартного.
Файл шаблона как я понимаю отвечает за вывод в момент создания\изменения записи. А вот в фильтр это поле выводится на основе соответствующего файла из system/fields:
return html_select_multiple($this->name, $items, $value);
return html_list_multiple($this->name, $items, $value);
$attr_str = html_attr_str($attributes); $html = '<select name="'.$name.'" '.$attr_str.'>'."\n".'<option></option>'."\n"; foreach ($items as $value=>$title){ if ($selected == $value) { $sel = 'selected'; } else { $sel = ''; } $html .= "\t" . '<option value="'.htmlspecialchars($value).'" '.$sel.'>'.htmlspecialchars($title).'</option>' . "\n"; } $html .= '</select>'."\n"; return $html; }
Вопрос к знатокам: Как сделать вывод списка с мультивыбором в фильтре в виде обычного списка <select> а не чекбоксов.
Если просто в наглую заменить заменить функции в system/fields/listmultiple на те что содержаться в просто system/fields/list, то по этому полю фильтр работать перестает.
Как на странице с записью вывести информацию о пользователе (id, логин) создавшем эту запись в меню действий?
Возможно кто то уже реализовал у себя по аналогии со вставкой id текущего пользователя через {user:id}?
В шаблоне вывода (template\имя_шаблона\content\тип_контента) пропишите там где нужен вывод картинки следующее:Как сделать чтобы он был не пустым?
Можете показать на примере, я просто в программировании не шарю.
<img src="<?php echo html_image_src($item['image'], 'big', true); ?>" alt="<?php html($item['title']); ?>" border="0">
big — размер картинки (из тех вариантов что выбираются в настройках поля)
И удаляете картинку из цикла вывода полей ( <?php foreach($fields as $name=>$field){ ?> ):
<?php if ($name == 'image') { continue; } ?>
Ответа тогда не последовало по сути, так что присоединюсь к Вашему вопросу в этот раз :)
upload_max_filesize integer The maximum size of an uploaded file. When an integer is used, the value is measured in bytes. Shorthand notation, as described in this FAQ, may also be used.
Пытался редактировать php.ini, но что-то не получилось.
А что именно там редактировали? Необходимо отредактировать upload_max_filesize