Поля ListMultiple и List в icms2
— есть такая проблем!!!нет возможности задать несколько значений при добавлении контента
надо решить
Сложность в том, что появляется связь "один ко многим", то есть значения таких полей нужно хранить в отдельных таблицах, количество и параметры которых заранее неизвестны.
Вам картина виднее, но как вариант можно попробовать так, где то я это видел не помню в какой системе примеительно к инстанту: в базе тип_контента — fields значение values массив из строк впереди можно добавить цифровое значение чтобы сделать привязку к поиску значений и соответствия, в базе тип_контента несколько значений такой же массив из строк куда мы записываем массив при добавлении — совпадения ищем по цифровому значению откинув сибволы после определенного симбвола, например массив в базе тип_контента_поля: 1`значение, 2`значение, 3`значение, при создании записи добавляем симбволы до ` в массив в типе_контента 1(значение 1) 3(значение 3) — при выводе наоборот, при выводе в фильтре делаем сравнение если есть совпадение по одной из искомой выводим запись. Как то так, так же смотрю разные решения…не придумал как лучше
public function filterMultiIn($field, $value){ $this->filterStart(); foreach($value as $k=>$v){ $v = $this->db->escape($v); $this->filterOr()->filter("locate('{$v}',{$field})>0"); } $this->filterEnd(); return $this; }
как-то так
// public function validate_array_key($array, $value){ // if (!isset($array[$value])) { return ERR_VALIDATE_INVALID; } // return true; // } public function validate_array_key($array, $value){ foreach ($value as $val){ } } else { } return true; }
с icms 2.1.2 есть такие отличия
include_once $hook_file; — cmsCore::includeFile($hook_file);
если их вносишь то при добавлении поля белый экран
в model.php управление кешем тоже нужно менять?
а куда вы их вносите?если их вносишь то при добавлении поля белый экран
// public function validate_array_key($array, $value){ // if (!isset($array[$value])) { return ERR_VALIDATE_INVALID; } // return true; // } public function validate_array_key($array, $value){ foreach ($value as $val){ } } else { } return true; }
public function filterMultiIn($field, $value){ $this->filterStart(); foreach($value as $k=>$v){ $v = $this->db->escape($v); $this->filterOr()->filter("locate('{$v}',{$field})>0"); } $this->filterEnd(); return $this; }
Рабочий метод, но не по фен-шую, как говорится) Использовать locate и like в таких выборках не поднимается рука из эстетических соображений. Плюс это может давать побочные эффекты (если один вариант списка является вхождением в другой вариант). В общем хочется сделать все более грамотно, хотя и ваш способ имеет право на жизнь.r2, что вы можете сказать про использование такого метода