Как вызвать событие при нажатии кнопки в профиле пользователя?


Допустим, я хочу создать группу узлов на основе того, что находится в определенном поле, когда кто-то нажимает кнопку в своем профиле пользователя.

Возможно ли это с помощью специально созданного модуля? И если да, то какой крючок я бы использовал для отображения этой кнопки в профиле пользователя, и как бы я заставил ее вызывать пользовательскую функцию по щелчку?

Author: kiamlaluno, 2015-03-26

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

 0
Author: jphelan, 2015-03-26 17:28:13

Вау, это вопрос со многими решениями. Некоторые вещи, которые я могу быстро придумать:

Разработчики способ:

  1. создайте пользовательский модуль: https://www.drupal.org/developing/modules/7
  2. реализуйте hook_menu для создания обратных вызовов для ваших ссылок
  3. реализуйте свою логику в функциях обратного вызова, определенных для ваших записей в hook_menu.
  4. "уровень представления". В зависимости от структуры вашего сайта и вашего профили:

    A) Создайте блок с вашими ссылками в нем, ссылки: пример блока_, функция связи

    Б) Реализовать "псевдополе" для объектов, доступных для заполнения (например, пользователь, профиль 2)

    C) Используйте функцию ссылки в файле шаблона вашего профиля, напримерuser-profile.tpl.php

Дополнительные баллы могут быть начислены, если вы используете функцию ссылки и реализацию меню крючка вместе с платформой ajax. пример.

Создатели сайтов способ (один из способов.. их много):

  1. создайте флаг
  2. создайте правило для пометки элементов
  3. в этом правиле реализуйте свою логику
  4. необязательно: отмените пометку (чтобы пользователь мог повторить это действие)

Все упомянутые решения, вероятно, потребуют некоторой логики для обработки доступа и отображения этой кнопки.

(один) разработчик способ, если эта кнопка отображается на пользователе/идентификаторе:

<?php
global $user;    
if (arg(0) == 'user' && arg(1) == $user->uid && null === arg(2) {
  print l('do something', 'yourcallballback/' . arg(1));
}

Разработчики сайтов способ (для примера выше):

Обычно здесь не требуется дополнительная проверка доступа, вы можете настроить этот флаг как глобальный и доступный только один раз, если хотите убедиться, что он доступен только один раз. для части отображения вам, вероятно, действительно придется использовать код, чтобы показывать этот флаг только в том случае, если текущий пользователь посещает свой собственный профиль.

 0
Author: Andre Baumeier, 2015-03-26 16:59:56