Выполнение PHP скрипта через AJAX Drupal 7

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

Аватар пользователя evadex evadex 17 февраля 2017 в 14:50

Здравствуйте!

Имеется php скрипт:

<?php
function getevents($tid) {
if (!empty(
$tid)) {$tid=0}
  
$query db_select('node','n');
  
$query->join('field_data_field_date','fd','n.nid = fd.entity_id');
  
$query->join('field_data_field_endtime','fed','n.nid = fed.entity_id');
  
$query->join('field_data_field_taxonomy','ftx','n.nid = ftx.entity_id');
/* здесь код получения данных из БД, для рассмотрения не нужен */
  
foreach ($q as $record) {
/* здесь кода заполнения переменных */
    
$result .= "<div class='$et event c$cat $when'><div class='conteiner'>";
    
$result .= "<div class='datetime'><span class='date_num'>".date('d '.$month[date('n',$nd)-1],$nd)."</span> / ".date('H:i ',$nd)."</div>";
    
$result .= "<h2><a href='".$url."'>".$title."</a></h2>";
    if (
$node->field_image[und][0][filename]!="") {
        
$result .= "<div class='picture'><img src='/sites/default/files/events/".$node->field_image[und][0][filename]."'></div>";
    }
    
$result .= "<div class='teaser'><p>".$body."</div>";
    
$result .= "<div class='comment_count $notLoggin'><a href='".$url."#comments'>Оставить отзыв</a></div>";
    
$result .= "</div></div>"
  }
  unset(
$record);
  echo 
$result;
}
?>

он работает, если вставить его в тело ноды и указать tid. Пусть и написан криво, но не суть, пока.

Задача: при клике по ссылке, обращаться к скрипту через AJAX, передав в него $tid, получить результат и вставить на сайт.

Пробовал обычной связкой JQuery+Ajax, но получал ошибку http 500 internal server error. Поискал по нету, понял, что так нельзя, нужно использовать drupal.ajax и hook_menu(). Почитал всякие доки, но ничего не понял.

Что собственно непонятно?

1. Как правильно написать хук?
2. Я так понимаю, описанная выше функция — это и есть page callback или это все таки delivery callback? Как правильно переписать ее вывод?

Комментарии

Аватар пользователя bumble bumble 18 февраля 2017 в 10:58

Алгоритм, следующий:

  • реализация hook_menu с delivery callback'ом ajax_deliver
  • описание коллбека с логикой, который возвращает результат (т.к. необходима вставка результата - используйте AJAX-команды)
  • добавление Drupal-way AJAX-ссылки в ноду (или куда там нужно)

Почитать: