Нужен совет, чтобы понять мою логику в d7 - PullRequest
0 голосов
/ 19 декабря 2011

Цель: Сохранение информации об обновляемом узле. Нам нужно собрать идентификатор узла, который обновляется, а также имена пользователей, которые его отметили.

Реализация:

Мне удалось получить и эту деталь, используя модуль flags и rules. Я сделал специальный модуль, который реализовал хук, чтобы получить эту информацию.

Я застреваю здесь:

Теперь мне нужно сохранить имя пользователя и идентификатор узла. Я все еще решаю, хочу ли я использовать поля или слой БД.

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

Теперь проблема в том, что я не знаю точно, сколько узлов будет достаточно. Это зависит от пользователя. Это может быть 5, может быть 500 или даже 5000 идентификаторов узлов, которые, возможно, потребуется сохранить для одного пользователя.

Итак, как мне обеспечить это?

Так что я застрял в логике. Как мне использовать слой db или поля в пользовательском типе контента, чтобы сохранить это? и как мне это сделать?

Пожалуйста, совет. Я использую d7.

код пользовательского модуля

/*
* Implementation of the hook_rules_action_info() 
* 
*/
function customvishal_rules_action_info()
{
$actions = array(
'customvishal_action_userdetail' => array(
    'label' =>t('Custom function to send notifications'),
    'group'=>t('Cusotm Code for sending notifications'),
    'parameter'=> array(
     'account'=> array(
         'type'=>'user',
         'label'=>t('Going to get user list'),

     ),

     // for the node
     'productdetail'=> array(
         'type'=>'node',
         'label'=>t('Passding the node data'),

     ),   



    )
 ),



 ); 

 return $actions; 

 }


/*
* The action function for the rules exampled hello world
* 
*/
function customvishal_action_userdetail($account,$productdetail)
{

 drupal_set_message(t('This user #username! has flagged it', 
      array('#username' => $account->mail)));

 drupal_set_message(t('This node #nid has got updated', 
      array('#nid' => $productdetail->nid)));


 // The above takes care of the node and the user information later I will put 
 // it in a db or  something like  that.


 // end of the function customvishal_action_userdetail
 }

1 Ответ

0 голосов
/ 20 декабря 2011

Похоже, вы должны использовать hook_node_update () и hook_node_insert () для доступа к узлам, которые были только что добавлены или обновлены.

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

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

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

<?php
// hook into node inserts
function customvishal_node_insert($node) {
  if ($node->type == 'mynodetype') {
    customvishal_handle_data($node);
  }
}

// hook into node updates
function customvishal_node_update($node) {
  if ($node->type == 'mynodetype') {
    customvishal_handle_data($node);
  }

}

// custom handler for the nodes
function customvishal_handle_data($node) {
  // load a user object of the node's author
  $author = user_load($node->uid);

  // now do what we need to do with $node and $user data

}

Помните, что вам нужно очистить кеш Drupal, чтобы новые хуки в вашем модуле работали в D7.

...