Как создать пользовательский модуль для отображения рассчитанного значения на уже существующей странице / представлении? - PullRequest
0 голосов
/ 19 февраля 2019

Попытка начать работу с разработкой пользовательского модуля на Drupal 8. Не иметь предыдущего опыта разработки Drupal.Читал и смотрел некоторые материалы в последние 2 недели или около того.

Я решил рискнуть сделать что-то более «сложное», чем «Hello World», но я застрял на том, как бы я на самом деле поступил по этому поводу..

Это то, что у меня пока есть:

  1. Я создал тип контента для "людей".Это очень просто, все, что у него есть, это имя и дата рождения человека (только дата), так что вы можете использовать форму для ввода нескольких человек.
  2. Я создал представление, которое отображает список людей, их имена иих дата рождения.Конечно, пока все использует ядро ​​администратора.
  3. Теперь я хотел создать пользовательский модуль, который вычисляет возраст человека (на основе даты, хранящейся в БД).Он берет сегодняшнюю дату, вычитает дату рождения человека и вычисляет его возраст.
  4. Затем, с некоторой магией, он возвращает возраст для вывода рендера / страницы, и теперь это вычисленное значение (возраст) будет отображаться навид, а также имя и дата рождения человека.

Я предполагаю, что мне нужно было бы "зацепиться" за место где-нибудь, где список людей возвращается из базы данных.Затем я перебираю данные, получаю дату рождения, вычисляю возраст, вставляю результат (возраст) обратно в данные, и затем страница / представление отображает это - каким-то образом.

Конечно, я уже застряло том, как я буду делать это?Куда мне нужно подключиться?С каким API?И затем, конечно, я уже создал представление, но у представления нет поля «возраст» - так как оно рассчитывается на лету.Итак, где и как мне это отобразить?

Так много вопросов ...

Если бы кто-нибудь знал какой-нибудь учебник, похожий на этот, я был бы признателен.Трудно начать работать с «пользовательской» стороной Drupal.

Спасибо за несколько советов!

1 Ответ

0 голосов
/ 19 февраля 2019

без пользовательского программирования

Вы можете сделать это без специального кодирования.Для этого вы можете использовать любой из следующих модулей field_token_value или computed_field .

Они оба создают поле, не предоставляя пользователю текстовое поле для ввода какого-либо значения.Значение таких полей рассчитывается из предопределенных правил / пользовательских кодов / токенов, определенных для каждого поля.

из вашей пользовательской темы

Самый простой способ - сделать это на слое theming и не сохранять это значение в базе данных.Вы должны использовать hook_preprocess_node в своем THEMENAME.theme

function THEMENAME_preprocess_node(&$variables){
  //install debug and kint to be able to use
  //kint($variables);

  $node = $variables["node"];

  if($node->getType() == "CONTENTTYPE" && $node->hasField('field_date')){

    //get date value something like "2018-09-07T21:35:30"
    $date = $node->field_date->value;

    //your logic and age calculations
    // ...
    $age = 35;

    //set variable to use in node.html.twig based templates
    $variables["person_age"] = $age;
  }
}

Чтобы получить больше информации о том, что доступно, установите модуль отладки и включите kint (который является частью отладки), чтобы иметь возможность видеть переменныеиспользуя kint функцию

, чем скопируйте node.html.twig из вашей пользовательской темы (или родительской темы, или классной базовой темы) в папку THEMENAME/templates и переименуйте ее node--CONTENTTYPE.html.twig.

Здесь вы можете включить переменную, которую вы только что создали в proprocess.

person age: {{ person_age }}

Убедитесь, что вы очистили кэш для всех этих изменений, которые будут видеть Drupal.

ДЛЯ ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ

Чтобы узнать, какие шаблоны веток следует переопределить, см. здесь Подробнее о ветке и получении доступных переменных Получение дополнительной информации о том, какая веткаИспользуемый шаблон также можно получить, включив режим отладки по предыдущей ссылке.

Я бы посоветовал вам взять книгу по разработке drupal, чтобы понять все эти концепции более конкретно.

...