Подскажите как мне в моем виджете получить из базы данных информацию?
Как сделать это методами движка, а не самому писать подключение к базе и запросы?
Пример кода приветствуется
docs.instantcms.ru/dev/widgets
docs.instantcms.ru/dev/models/get
Спасибо большое) Я думал нет доков для движка
Буду сегодня изучать.
При попытке использовать в виджете запрос к базе выдает ошибку 500 на странице.
Не могу понять как правильно определить модель для виджета, который не относится к компоненту.
class widgetVaccordion extends cmsWidget { //отключаем кеширование public $is_cacheable = false; public function run(){ class modelVaccordion extends cmsModel { $categoryes = $this->get('con_board_cats'); } 'categoryes' => $categoryes ); } }
$model_class = cmsCore::getModel('class');
Подредактировать свой класс, что бы можно было получить инстанс, закинуть в папку с классами, дальше как обычно:
$model_class = cmsCore::getModel('class');
Ой ой ничего не понял ((
1) В какую папку с классами закидывать? — создать новую для виджета? — по какому адресу ее создавать?
2) Какой файл закидывать? — создать его? — что в него писать?
Это? class modelVaccordion extends cmsModel {… }
3) В файле виджета писать ваш код?
$model_class = cmsCore::getModel('Vaccordion');
$users_model = cmsCore::getModel('content');
docs.instantcms.ru/dev/controllers/model
# Подключаем модель компонента. Для запросов в БД неважно какого поэтому берем модель компонента content $model = cmsCore::getModel('content'); #Составляем запрос в БД $model->filterEqual('название поля таблицы', 'искомое значение')->filterEqual('название поля таблицы 2', 'искомое значение 2'); # делаем запрос в БД и записываем результат в переменную $result, варианты на выбор: $result = $model->get('имя таблицы');// получить все записи с этими параметрами $result = $model->getItem('имя таблицы');// получить 1 запись с этими параметрами $result = $model->getFieldFiltered('имя таблицы', 'имя нужного поля');// получить значение конкретного поля
Тема обширная, запросов есть много и разных, но вкратце все выглядит так:
# Подключаем модель компонента. Для запросов в БД неважно какого поэтому берем модель компонента content $model = cmsCore::getModel('content'); #Составляем запрос в БД $model->filterEqual('название поля таблицы', 'искомое значение')->filterEqual('название поля таблицы 2', 'искомое значение 2'); # делаем запрос в БД и записываем результат в переменную $result, варианты на выбор: $result = $model->get('имя таблицы');// получить все записи с этими параметрами $result = $model->getItem('имя таблицы');// получить 1 запись с этими параметрами $result = $model->getFieldFiltered('имя таблицы', 'имя нужного поля');// получить значение конкретного поля
Спасибо получилось. А то я делал немного не правильно. Писал запрос в модели подключенного компонента.
Не понятно только почему для самостоятельного виджета нужно подключать модель какого-то компонента.
Потому, что данная CMS так устроена, что работать с БД может только модель. Методы filterEqual, getItem и т.д. это методы самой модели. Использовать их можно только создав экземпляр класса моделиНе понятно только почему для самостоятельного виджета нужно подключать модель какого-то компонента.
$model = cmsCore::getModel('content');
$model->нужный метод
<?php if ($device_type == 'desktop') { # Подключаем модель компонента. Для запросов в БД неважно какого поэтому берем модель компонента content $model = cmsCore::getModel('content'); #Составляем запрос в БД $model->filterEqual('id', $random); $result = $model->getFieldFiltered('con_person', 'slug');// получить значение конкретного поля echo $result; ?>
Ребята, у меня выбирается строка случайным образом по id. Затем в $result я получаю значение конкретного поля в этой строке. Подскажите пожалуйста как изменить запрос/запросы чтобы также по случайно выбранному id строки получить несколько разных полей этой строки? Спасибо.
<?php if ($device_type == 'desktop') { # Подключаем модель компонента. Для запросов в БД неважно какого поэтому берем модель компонента content $model = cmsCore::getModel('content'); #Составляем запрос в БД $model->filterEqual('id', $random); $result = $model->getFieldFiltered('con_person', 'slug');// получить значение конкретного поля echo $result; ?>Ребята, у меня выбирается строка случайным образом по id. Затем в $result я получаю значение конкретного поля в этой строке. Подскажите пожалуйста как изменить запрос/запросы чтобы также по случайно выбранному id строки получить несколько разных полей этой строки? Спасибо.
Попробуйте присвоить переменной result ниже аналогичный запрос, но вместо «slug» имя другого поля. В echo должно выйти два поля, не проверял но проверьте, нотисы скиньте если будут. Тут скорее всего перезапишется первый запрос, но проверьте. У меня пока голова забита после беготни от землетрясения, трудно настроиться)) Либо -
$result = $model->getFieldFiltered(«con_person», «slug»);
$resulttwo = $model->getFieldFiltered(«con_person», «slugs») ;
echo= $result, $resulttwo;
Либо
$result = $model->getFieldFiltered(«con_person», «slug»);
$result = $model->getFieldFiltered(«con_person», «slugs») ;
echo= $result;
В общем как то так, но он не идеален)). Проверьте еще кавычки. Или нужно чтобы поля выходили тоже случайно?