Как вызвать событие при нажатии кнопки в профиле пользователя?
Допустим, я хочу создать группу узлов на основе того, что находится в определенном поле, когда кто-то нажимает кнопку в своем профиле пользователя.
Возможно ли это с помощью специально созданного модуля? И если да, то какой крючок я бы использовал для отображения этой кнопки в профиле пользователя, и как бы я заставил ее вызывать пользовательскую функцию по щелчку?
2 answers
Да, пользовательский модуль может выполнить это. Я бы использовал api форм drupal для создания простой формы и вывода ее в блок, который вы отображаете на страницах профиля пользователя. Приведенный ниже код должен помочь вам начать работу.
Создайте форму. Скрытый элемент захватывает идентификатор пользователя из URL-адреса.
function my_module_form($form, &$form_state) {
$form = array();
$form['uid'] = array(
'#type' => 'hidden',
'#value' => arg(1),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
return $form;
}
function my_module_form_submit($form, &$form_state) {
$uid = $form_state['values']['uid'];
// do some stuff
}
Теперь используйте hook_block_info и hook_block_view, чтобы создать новый блок, содержащий вашу форму.
/**
* Implementation of hook_block_info().
*/
function my_module_block_info() {
$blocks['my_module'] = array(
'info' => t('My Name'),
);
return $blocks;
}
/**
* Implementation of hook_block_view().
*/
function my_module_block_view($delta='') {
$block = array();
switch ($delta) {
case 'my_module':
$block['subject'] = t('My Title');
$my_form = drupal_get_form('my_module_form');
$block['content'] = drupal_render($my_form);
break;
}
return $block;
}
Вот статья о создании модуля в D7, если вы не знакомы с тем, как это сделать. http://www.justinphelan.com/post/how-write-your-own-module-drupal-7
Вау, это вопрос со многими решениями. Некоторые вещи, которые я могу быстро придумать:
Разработчики способ:
- создайте пользовательский модуль: https://www.drupal.org/developing/modules/7
- реализуйте hook_menu для создания обратных вызовов для ваших ссылок
- реализуйте свою логику в функциях обратного вызова, определенных для ваших записей в hook_menu.
-
"уровень представления". В зависимости от структуры вашего сайта и вашего профили:
A) Создайте блок с вашими ссылками в нем, ссылки: пример блока_, функция связи
Б) Реализовать "псевдополе" для объектов, доступных для заполнения (например, пользователь, профиль 2)
C) Используйте функцию ссылки в файле шаблона вашего профиля, напримерuser-profile.tpl.php
Дополнительные баллы могут быть начислены, если вы используете функцию ссылки и реализацию меню крючка вместе с платформой ajax. пример.
Создатели сайтов способ (один из способов.. их много):
- создайте флаг
- создайте правило для пометки элементов
- в этом правиле реализуйте свою логику
- необязательно: отмените пометку (чтобы пользователь мог повторить это действие)
Все упомянутые решения, вероятно, потребуют некоторой логики для обработки доступа и отображения этой кнопки.
(один) разработчик способ, если эта кнопка отображается на пользователе/идентификаторе:
<?php
global $user;
if (arg(0) == 'user' && arg(1) == $user->uid && null === arg(2) {
print l('do something', 'yourcallballback/' . arg(1));
}
Разработчики сайтов способ (для примера выше):
Обычно здесь не требуется дополнительная проверка доступа, вы можете настроить этот флаг как глобальный и доступный только один раз, если хотите убедиться, что он доступен только один раз. для части отображения вам, вероятно, действительно придется использовать код, чтобы показывать этот флаг только в том случае, если текущий пользователь посещает свой собственный профиль.