Это скорее всего напоминание себе, но пригодится многим, кто пытается адаптировать свои наработки под ICMS2.
Суть в том, что не всегда есть время перевести sql запросы под стандартные запросы в файле model.php у какого-либо компонента.
Поэтому авторы icms2 внедрили все что нам нужно, но не о всем рассказали. Я попробую прояснить один такой фокус.
Например У вас идет большая выборка с перечисление многих параметров и выбирать надо несколько таблиц или столбцов. То для тех, кто плохо знаком с моделью запросов простой выход будет сделать вот так:
Открываем файл model.php вашего компонента.
создаем функцию:
под переменной $query может быть любая переменная которую вы передаете из action.
Далее как нам выполнить сам запрос в базу?
Да очень просто
Задаем таблицу для запроса
В запрос sql вы можете вставлять любые переменные, главное помнить правильность написания запроса.
Далее нам надо вызвать команду, которая и выполнит данный запрос.
Это будет
Тут мы просто просим средствами ICMS2 выполнить sql запрос.
Далее мы получим массив, который надо обработать
Для удобства все операторы совпадают с общепринятыми операторами в SQL, что позволит не трактовать по разному ожидаемый результат.
Ну и общая картинка у нас получается вот такая:
Код не идеален, можно подправлять и добавлять.
Ну а в tpl файле незабываем, что нам надо массив $items перебрать чтоб все полученное вывести:
Важно, что в action вы должны запрос из model.php вызвать.
Поэтому в запросе у меня items, а в tpl я перебираю $results
Спасибо ВСЕМ, кто активно помогает разбирать вопросы на форуме.
Суть в том, что не всегда есть время перевести sql запросы под стандартные запросы в файле model.php у какого-либо компонента.
Поэтому авторы icms2 внедрили все что нам нужно, но не о всем рассказали. Я попробую прояснить один такой фокус.
Например У вас идет большая выборка с перечисление многих параметров и выбирать надо несколько таблиц или столбцов. То для тех, кто плохо знаком с моделью запросов простой выход будет сделать вот так:
Открываем файл model.php вашего компонента.
создаем функцию:
public function poiskAbonent($query) { }
Далее как нам выполнить сам запрос в базу?
Да очень просто
Задаем таблицу для запроса
$table_name='dogovora';// тут вы можете приравнять переменной, чтоб был запрос универсальнее $sql="SELECT * FROM cms_".$table_name." WHERE name='ИМЯ' OR name LIKE %'.$query.' %";
Далее нам надо вызвать команду, которая и выполнит данный запрос.
Это будет
$sql_result = $this->db->query($sql);
Далее мы получим массив, который надо обработать
while ($item = $this->db->fetchAssoc($sql_result)){ }
Ну и общая картинка у нас получается вот такая:
public function poiskAbonent($query){ $table_name='dogovora'; $sql="SELECT * FROM cms_".$table_name." WHERE name='ИМЯ' OR name LIKE %'.$query.' %"; $sql_result = $this->db->query($sql); //проверяем есть ли что для нас по запросу if (!$this->db->numRows($sql_result)){ return false; } //объявляем массив для переменных //пробегаемся по массиву полученному от запроса while ($item = $this->db->fetchAssoc($sql_result)){ $items[] = $item; } return $items; }
Код не идеален, можно подправлять и добавлять.
Ну а в tpl файле незабываем, что нам надо массив $items перебрать чтоб все полученное вывести:
<?php foreach($results as $item){ ?> вывод переменной: <?php html($item['name']); ?> <? } ?>
public function search($query){ $results=$this->model->poiskAbonent($query); return $results; }
Спасибо ВСЕМ, кто активно помогает разбирать вопросы на форуме.
Реклама #
Yurik 9 лет назад #
для примера под Ваш запрос (в модели):
Yurik 9 лет назад #
kirkr 9 лет назад #
так что чем больше вариантов, тем проще всем ;)
My-InstantCMS.Ru 9 лет назад #
Старый балбес 9 лет назад #
достаточно в конструктор frontend компонента определить
Fuze 9 лет назад #
Могу понять (гипотетически) передачу в свойство модели префикс и то это вызывает большие сомнения. Но, как говорится, хозяин-барин.
И самое важное. Объект базы данных оправдано использовать (опять же в идеале):
а) в модели
б) для сложных запросов, которые нельзя выполнить стандартными методами основной модели, например вот такой
Yurik 9 лет назад #
Старый балбес 9 лет назад #
Такой подход имеет определенный плюс
1- ПЛЮС _ для молодых разработчиков которые постепенно вросли и поняли идеологию двойки, поняли суть типов контента
а-простая формулировка запросов
б- простое восприятие выполняемых запросов
с- легкая обучаемость и ассоциативная запоминаемость выполняемых действий
2- МИНУС _ для молодых кадров понятие $model->filterEqual('name', 'ИМЯ'); однозначно в дальнейшей жизни кроме инстанта и не понадобится.
Подвожу итог.
Двойка неоднозначная система.
И заявление - (не программистов а простых пользователей, хоть и с мудреным умом и опытом ) - что : Я,
ВСЕ МОГУ ТИПАМИ КОНТЕНТА выполнить...
Меня всегда приводит к поднятию настроения и понимания что если тебя никто не ограничил в рамках используемой системы , то это просто нереальная фантастика.
Но прямой запрос будет отправлен на обработку быстрее.
Это и ранее называлось
kirkr 9 лет назад #
Начинается все с файлов module.php у других компонентов, но в главном файле модуль.пхп все намного богаче и куча вариаций.
Я привел данный пример лишь для того, чтоб проблема с запросом не тормозила разработку, а когда результат получен и остальные ошибки подправлены, то можно изучить детальнее файлик module.php
Не знаю надо нет написать про динамичные формы в ICMS2, мне помогли разобраться на форуме. Когда уже их сам наделал несколько штук, то форма вызова всего кажется очень простой и понятной. И подключение одного компонента в другом реализовано очень просто.