Обращение к базе данных

InstantCMS 2.X
#1 18 февраля 2017 в 13:06
Здравствуйте,

Подскажите как мне в моем виджете получить из базы данных информацию?

Как сделать это методами движка, а не самому писать подключение к базе и запросы?

Пример кода приветствуется smile
#3 18 февраля 2017 в 14:29


docs.instantcms.ru/dev/widgets
docs.instantcms.ru/dev/models/get

Jestik

Спасибо большое) Я думал нет доков для движка scratch
Буду сегодня изучать.
#4 18 февраля 2017 в 18:20
Подскажите.
При попытке использовать в виджете запрос к базе выдает ошибку 500 на странице.
Не могу понять как правильно определить модель для виджета, который не относится к компоненту.

  1.  
  2. class widgetVaccordion extends cmsWidget {
  3.  
  4. //отключаем кеширование
  5. public $is_cacheable = false;
  6.  
  7. public function run(){
  8.  
  9. class modelVaccordion extends cmsModel {
  10. $categoryes = $this->get('con_board_cats');
  11. }
  12.  
  13. return array(
  14. 'categoryes' => $categoryes
  15. );
  16.  
  17. }
  18.  
  19. }
  20.  
#5 18 февраля 2017 в 18:41
Подредактировать свой класс, что бы можно было получить инстанс, закинуть в папку с классами, дальше как обычно:
  1.  
  2. $model_class = cmsCore::getModel('class');
  3.  
joke
#6 18 февраля 2017 в 18:55


Подредактировать свой класс, что бы можно было получить инстанс, закинуть в папку с классами, дальше как обычно:

  1.  
  2. $model_class = cmsCore::getModel('class');
  3.  
joke

oruchimaru

Ой ой ничего не понял ((

1) В какую папку с классами закидывать? — создать новую для виджета? — по какому адресу ее создавать?

2) Какой файл закидывать? — создать его? — что в него писать?
Это? class modelVaccordion extends cmsModel {… }

3) В файле виджета писать ваш код?
$model_class = cmsCore::getModel('Vaccordion');
#7 18 февраля 2017 в 19:11
Ой, слушайте, походу я не правильно вам ответил, в папке классы хранятся системные классы, можно ли их так присоеденять таким методом, я не знаю, но советую создать контроллер в папке /system/controllers/, переименовать свой класс в model.php и попробовать так же включить его $model_class = cmsCore::getModel('class');
#9 18 февраля 2017 в 19:14
Более лучше вы поймете, если посмотрите видео в документации http://docs.instantcms.ru/dev/video
#10 19 февраля 2017 в 00:42
Тема обширная, запросов есть много и разных, но вкратце все выглядит так:
  1. # Подключаем модель компонента. Для запросов в БД неважно какого поэтому берем модель компонента content
  2. $model = cmsCore::getModel('content');
  3. #Составляем запрос в БД
  4. $model->filterEqual('название поля таблицы', 'искомое значение')->filterEqual('название поля таблицы 2', 'искомое значение 2');
  5. # делаем запрос в БД и записываем результат в переменную $result, варианты на выбор:
  6. $result = $model->get('имя таблицы');// получить все записи с этими параметрами
  7. $result = $model->getItem('имя таблицы');// получить 1 запись с этими параметрами
  8. $result = $model->getFieldFiltered('имя таблицы', 'имя нужного поля');// получить значение конкретного поля
#11 19 февраля 2017 в 08:35


Тема обширная, запросов есть много и разных, но вкратце все выглядит так:

  1. # Подключаем модель компонента. Для запросов в БД неважно какого поэтому берем модель компонента content
  2. $model = cmsCore::getModel('content');
  3. #Составляем запрос в БД
  4. $model->filterEqual('название поля таблицы', 'искомое значение')->filterEqual('название поля таблицы 2', 'искомое значение 2');
  5. # делаем запрос в БД и записываем результат в переменную $result, варианты на выбор:
  6. $result = $model->get('имя таблицы');// получить все записи с этими параметрами
  7. $result = $model->getItem('имя таблицы');// получить 1 запись с этими параметрами
  8. $result = $model->getFieldFiltered('имя таблицы', 'имя нужного поля');// получить значение конкретного поля

dwd

Спасибо получилось. А то я делал немного не правильно. Писал запрос в модели подключенного компонента.
Не понятно только почему для самостоятельного виджета нужно подключать модель какого-то компонента.
#12 19 февраля 2017 в 13:55
somik, наверно потому что у виджетов нету модели, а компонент же Вам не нужен
#13 19 февраля 2017 в 15:51

Не понятно только почему для самостоятельного виджета нужно подключать модель какого-то компонента.

somik
Потому, что данная CMS так устроена, что работать с БД может только модель. Методы filterEqual, getItem и т.д. это методы самой модели. Использовать их можно только создав экземпляр класса модели
  1. $model = cmsCore::getModel('content');
и обращаясь к нему
  1. $model->нужный метод
Это касается не только работы с БД, но и вызовов других методов, доступных в модели того или иного компонента.
#14 9 февраля 2023 в 14:22
  1. <?php $random = rand(1,328); ?>
  2.  
  3. <?php if ($device_type == 'desktop') {
  4. # Подключаем модель компонента. Для запросов в БД неважно какого поэтому берем модель компонента content
  5. $model = cmsCore::getModel('content');
  6. #Составляем запрос в БД
  7. $model->filterEqual('id', $random);
  8. $result = $model->getFieldFiltered('con_person', 'slug');// получить значение конкретного поля
  9. echo $result;
  10. ?>
  11.  
  12.  

Ребята, у меня выбирается строка случайным образом по id. Затем в $result я получаю значение конкретного поля в этой строке. Подскажите пожалуйста как изменить запрос/запросы чтобы также по случайно выбранному id строки получить несколько разных полей этой строки? Спасибо.

#15 9 февраля 2023 в 15:17
  1. <?php $random = rand(1,328); ?>
  2.  
  3. <?php if ($device_type == 'desktop') {
  4. # Подключаем модель компонента. Для запросов в БД неважно какого поэтому берем модель компонента content
  5. $model = cmsCore::getModel('content');
  6. #Составляем запрос в БД
  7. $model->filterEqual('id', $random);
  8. $result = $model->getFieldFiltered('con_person', 'slug');// получить значение конкретного поля
  9. echo $result;
  10. ?>
  11.  
  12.  

Ребята, у меня выбирается строка случайным образом по 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;


  В общем как то так, но он не идеален)). Проверьте еще кавычки. Или нужно чтобы поля выходили тоже случайно?

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.