Чтение параметров из базы данных Drupal8 с помощью $.getJSON

Главные вкладки

Аватар пользователя pingvin156 pingvin156 30 марта 2017 в 21:15

Пытаюсь выбрать параметры для js с помощью $.getJSON. Обращаюсь к файлу. Если в нем прописать такое:

<?php$a = "10";
    $b = "20";
    $arr = array('sCaption' => $a, 'sRule' => $b);
    echo json_encode($arr);?>

, то на выходе получаю 2 параметра, но мне их надо брать запросом из БД. При попытке использовать db_query в этом файле ничего не происходит (подозреваю, что функция не из той области видимости). Сам файл располагается в корне сайта.
Как мне вытащить данные из БД?
Или есть иной способ?...

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 31 марта 2017 в 6:45

Чаще используют

...
jQuery.ajax({
                        url: url,
                        type: method,
                        dataType: type,
                        data: data,
                        success: callback
                });
...
Аватар пользователя gun_dose gun_dose 2 апреля 2017 в 16:09

Чтобы обращаться к функциям API друпала, надо не располагать какой-то файл в корне сайта, а писать модуль

Аватар пользователя pingvin156 pingvin156 2 апреля 2017 в 16:48

Спасибо за наводку.. А вот модули я уже научился делать.. допустим, я выберу данные в модуле.. пусть массив из базы данных возвращает какая-либо функция getData какого-там объекта my_module_object. Как мне обратиться к этой функции из javascript?..
Проблема всё так же.. мне просто надо считать данные из БД, чтобы юзать их в скрипте...

Аватар пользователя pingvin156 pingvin156 3 апреля 2017 в 13:07

gun_dose wrote:
Чтобы обращаться к функциям API друпала, надо не располагать какой-то файл в корне сайта, а писать модуль

Подскажи, пожалуйста, как это делается... Как с помощью модуля вытянуть данные из бд в java script

Аватар пользователя fairrandir fairrandir 31 марта 2017 в 10:33

Есть несколько способов
1. Через свой модуль
Написать свой модуль, определить в нём hook_menu - путь по которому будут выдаваться данные, в page callback - указать свою функцию, которая будет дёргать данные из базы. Минус - на каждый запрос будет происходить полный бутстрап друпала, что может привести к неудовлетворительной производительности.
2. Через частичный бутстрап
Колдануть файл, наподобие вашего, но с подключением друпала и бутстрапа его до DRUPAL_BOOTSTRAP_DATABASE
Пример можно посмотреть в модуле ядра statistics (modules/statistics/statistics.php). Минусы - ну, наверное есть. Для того чтобы сделать тупой селект и отдать его результаты через json - наверное нет.
3. Используя модуль js. Объединяет предыдущие 2 пункта. Придётся писать свой модуль, зато файл из пункта 2 будет уже готов. Плюсы - поудобнее апи, если надо делать много разных колбэков. Минусы - апи немного нелогичное, поддерживает только POST-запросы, для одного запроса - overkill.
4. Использовать различные REST-модули. Но это совсем overkill.

Аватар пользователя gun_dose gun_dose 31 марта 2017 в 10:42

fairrandir wrote:

4. Использовать различные REST-модули. Но это совсем overkill.

Про это можно поподробнее? Оверкилл - это хорошо или плохо?

Аватар пользователя fairrandir fairrandir 31 марта 2017 в 11:16

Оверкилл - слишком мощный инструмент для простой задачи.
Если нужно аяксом выхватывать результаты буквально одного запроса, даже без авторизации - то городить целое АПИ под это с кучей контриб-модулей и самописа - это перебор.

Аватар пользователя gun_dose gun_dose 31 марта 2017 в 11:27

В восьмёрке рест в ядре. Поставить из контрибных Rest UI и мышкой можно накликать абсолютно всё. Если в коробке нет подходящих сервисов - лепишь вьюху с рест-экспортом. Делов на 5 минут

Аватар пользователя fairrandir fairrandir 31 марта 2017 в 11:46

gun_dose wrote:
В восьмёрке рест в ядре.

Дык я за семёрку говорю. И не сомневаюсь, что если данные надо дёргать из какой-то своей таблицы, или даже из другой БД - пятью минутами мышкой не обойдёшься.