Нужно решить проблему с зависимыми списками при добавлении ноды.

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

Аватар пользователя sp33d sp33d 27 февраля 2019 в 17:35

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

Есть одна проблема. В деталях:
Есть 2 типа материалов - Маршрут и Билет. В Маршруте есть общие данные, в том числе Откуда, Куда, Время отправления, Название маршрута.
Для Билета (зависим от Названия маршрута) есть свои поля, но реализовать необходимо следующее. При добавлении нового Билета после выбора Маршрута автоматически перезаполняются поля Откуда, Куда, Время отправления (всё выпадающими списками).
Как это сделать - не могу разобраться, хотя гуглил, смотрел видео про Entity Reference, DDF и т.п. Или что-то делаю не так, или у меня несколько другая задача. Думал делать через обычное заполнение SELECT'ов через JS, но проблема возникла другая. Почему-то у меня не получается написать модуль таким образом, чтобы получать нужные данные через API модуля.

<?php
function swp_route_menu()
{
    
$items = array();

    

$items['admin/content/swp_route'] = array(
        
'title'            => 'SWP Route',
        
'description'      => 'Configure the SWP Route list.',
        
'page callback'    => 'swp_route_list',
        
'access arguments' => array('administer site configuration'),
    );
    
$items['admin/content/swp_route/list'] = array(
        
'title'  => 'SWP Route list',
        
'type'   => MENU_DEFAULT_LOCAL_TASK,
        
'weight' => 1,
    );
  
$items['admin/content/swp_route/api'] = array(
    
'title'            => 'SWP Route API',
    
'page callback'    => 'swp_route_list_api',
    
'type'   => MENU_DEFAULT_LOCAL_TASK,
    
'weight' => 1,
  );

    return 

$items;
}

function 

swp_route_list()
{
  
$query = new EntityFieldQuery();
  
$query->entityCondition('entity_type''node');
  
$query->propertyCondition('status'1);
  
$query->propertyCondition('type''ticket');
  
$result $query->execute();
  
$tickets node_load_multiple(array_keys($result['node']));
  
$ClientResult = array();
  foreach (
$tickets as $ticket)
  {
    
$name $ticket->field_ticket_name['und'][0]['value'];
    
$surname $ticket->field_ticket_surname['und'][0]['value'];
    if (!isset(
$ClientResult[$name ' ' $surname]))
      
$ClientResult[$name ' ' $surname] = 0;
    
$ClientResult[$name ' ' $surname]++;
  }

  

$Result '<table><thead><tr><th>Клиент</th><th>Количество купленных билетов</th></tr></thead><tbody>';
  foreach (
$ClientResult as $ClientName => $ClientTickets)
    
$Result .= "<tr><td>$ClientName</td><td>$ClientTickets</td></tr>";
  
$Result .= '</tbody></table>';
  return 
$Result;
}

function 

swp_route_list_api()
{
}
?>

Функция swp_route_list_api() почему-то просто не вызывается (хотя JS-код возвращает результат success). ИМХО, это было-бы самым простым решением. Прошу помощи!

P.S. Не пинайте слишком сильно, с Drupal 7 знаком поверхностно. Спасибо!.

Комментарии

Аватар пользователя Orion76 Orion76 27 февраля 2019 в 18:22

Возможно от недопонимания того, что должна делать Ваша система (билеты-маршруты), кажется что Вы как-то не так организовали структуру-связи данных.

Распишите, пожалуйста, подробнее: что это за билеты-маршруты и как и для чего они должны "работать".
Тогда станет понятнее, как правильно добиться нужного результата с учетом возможностей drupal.

Скорее всего и писать дополнительный код совсем не придется.

Ну или как минимум будет понятно как и где это сделать правильно.

Аватар пользователя sas@drupal.org sas@drupal.org 28 февраля 2019 в 7:16

Функция swp_route_list_api() почему-то просто не вызывается

Вывод сделан на основании чего?

хотя JS-код возвращает результат success

Чаще используется return drupal_json_decode

При добавлении нового Билета после выбора Маршрута автоматически перезаполняются поля Откуда, Куда, Время отправления (всё выпадающими списками).

Я бы сделал на уровне ajax API
Живые примеры https://www.drupal.org/project/examples -> ajax
Если хочется "оторвать голову" и сделать на отдельном фронте, то продуктивней уже Drupal 8 , см примеры https://www.contentacms.org/ -> example consumers