Как добавить к ноде кнопку програмно в Drupal 7?

Аватар пользователя unbound unbound 19 августа 2017 в 6:14

Всем привет!

Собственно,вопрос: как добавить к ноде кнопку в Drupal 7? Насколько я понял,это делается через hook_node_view,но непонятно,что добавить к аргументу $node (я вообще почему-то не могу найти описание полей этого объекта :( ). И как сделать так чтобы кнопка была видна только зарегистрированным пользователям? Проверять пользователя в функции хука и добавлять кнопку,если пользователь зарегистрирован или есть какой-то элегантный стандартный способ?

0 Thanks

Комментарии

Аватар пользователя 3_14yavka 3_14yavka 19 августа 2017 в 8:29

Распишите еще что за кнопка. Кнопка может быть частью формы, а может быть просто ссылкой. И на какой ноде ее вывести? На одной какой-то конкретной или всех нодах какого-то content type?

Аватар пользователя unbound unbound 19 августа 2017 в 11:07

Планируется добавить кнопку к ноде определенного типа и повесить на нее ajax-обработчик.

Аватар пользователя sas@drupal.org sas@drupal.org 19 августа 2017 в 8:52

> как добавить к ноде кнопку в Drupal 7?
Если если на страницу node/xxx, то

myTheme_node_view($node, $vm){
if($vm == 'full'){
$node->content['my_but'] = array(
    '#markup' => '<button>Большая красная кнопка</button>',
  );
}
}

https://api.drupal.org/api/drupal/modules%21node%21node.api.php/function...

>И как сделать так чтобы кнопка была видна только зарегистрированным пользователям?
https://api.drupal.org/api/drupal/modules%21user%21user.module/function/...

Аватар пользователя unbound unbound 19 августа 2017 в 11:09

Я собственно про это и писал в вопросе:

<?php
$node
->content['my_but'] = array(
    
'#markup' => '<button>Большая красная кнопка</button>',
  );
?>

1) Где посмотреть список аттрибутов типа #markup для объекта типа node?

«>И как сделать так чтобы кнопка была видна только зарегистрированным пользователям?
https://api.drupal.org/api/drupal/modules%21user%21user.module/function/...»

2) То есть все таки,кроме как проверить в хуке и исходя из значения is_anonymous() добавлять кнопку или нет,решения стандатртного нет (типа назначения доступа через аттрибут) нет,я правильно понимаю?

Аватар пользователя sas@drupal.org sas@drupal.org 19 августа 2017 в 11:24

> 1) Где посмотреть список аттрибутов типа #markup для объекта типа node?
- В коде
- В *.api.php
2) То есть все таки,кроме как проверить в хуке и исходя из значения is_anonymous() добавлять кнопку или нет,решения стандатртного нет (типа назначения доступа через аттрибут) нет,я правильно понимаю?

'#access' => !user_is_anonymous()
Аватар пользователя gun_dose gun_dose 19 августа 2017 в 10:51

Есть кнопки, которыми куртку застёгивают. Есть кнопка, по нажатию которой произойдет ядерный Армагеддон. Есть тэг button, который можно воткнуть в шаблон, если кнопка - это самодостаточный субъект, которому просто достаточно быть.

Но в 90% случаев под кнопкой подразумевают форму, которую ещё нужно где-то объявить, а потом просто добавить к билду в упомянутом вами хуке.

Аватар пользователя unbound unbound 19 августа 2017 в 11:08

«Но в 90% случаев под кнопкой подразумевают форму, которую ещё нужно где-то объявить, а потом просто добавить к билду в упомянутом вами хуке.»

См. мой ответ выше для 3_14yavka

Аватар пользователя gun_dose gun_dose 28 апреля в 16:30

В хук форм альтер добавляете свою кнопку, и задаёте ей нужный #weight, чтобы она появилась в нужном месте.

Но ещё нужно знать, что должна делать эта кнопка. Возможно, вам нужен не hook_form_alter, a hook_field_formatter_info_alter

Аватар пользователя leha373 leha373 28 апреля в 16:27
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );

так кнопка получается
как присвоить id,class
и чтобы была рядом с полем [field-adress]

Аватар пользователя leha373 leha373 28 апреля в 17:52

у меня поле адрес, сделать кнопку найти
после нажатия адрес передается в геокодер яндекс
и выставляется метка на карту по адресу
карта с помощью yandexmaps
как это реализовать?

Аватар пользователя ivnish ivnish 28 апреля в 19:10

Тут не просто "кнопку добавить" нужно. Нужно писать модуль с кастомной формой, которая будет реализовать ваш функционал