hook_menu

in
1 Comentario

El código me funciona pero cada usuario ve su propia pestaña de "my buddys activity", y me gustaría que todos pudiesen ver la de todos.

<?php
/**
* Implementation of hook_perm().
*/
function buddysactivity_perm() {
  return array(
'my buddys activity');
}
/**
* Implementation of hook_menu().
*/
function buddysactivity_menu($may_cache) {
 
$items = array();
  if (
$may_cache != true) {  
     if (
arg(0) == 'user')  { 
            
$items[] = array(
            
'path' => 'user/'. arg(1) .'/buddy',
            
'title' => t('my buddys activity'),
            
'callback' => 'my_buddy_activity',
            
'callback arguments' =>array('user', arg(1)),
            
'access' => user_access('my buddys activity'),
            
'type' => MENU_LOCAL_TASK,
                );  
        }
    }
    return
$items;
}
/*
*
*submit de la información.
*
*/
function my_buddy_activity (){
   
$pared = '<div id="pared"><ul>';
    if ((
arg(0) == 'user') && is_numeric(arg(1)) && (arg(2) == 'buddy'))
    {
$arg1 = arg(1);}  
   
$query="SELECT a.buddy, u.name, u.picture, n.created, n.title, n.nid, n.status
          FROM {users} u, {buddylist} a, {node} n
          WHERE u.uid = a.buddy
          AND a.uid =%d
           AND a.buddy = n.uid
          AND n.status =1
          order by n.created DESC"
;   
   
$result = db_query_range($query, $arg1, 0, 30);  
  while (
$data = db_fetch_object($result)) {
   
$pared .= '<li>
            <a href="'
.base_path().'node/'.$data->nid.'" alt="'.$data->title.'" title="'.$data->title.'">
            '
.$data->title.'
        </a>'
t('by') .' <a href="'.base_path().'user/'.$data->buddy.'" title="'.$data->name.'" alt="'.$data->name.'">'.$data->name.'</a>';
  }
    
$pared .= '</ul></div>';
    return
$pared;
    }
?>

Un saludo

Oskar

Pienso que...

Hola Oskar,

puedes probar por favor lo siguiente.

Cuando te refieres a todos me imagino que te refieres a los usuarios autentificados.
Controla si los usuarios tienen permisos de ver el perfil de otros usuarios "access user profiles".

entonces para mayor seguridad puedes anadir al array del menu:

...
             $items[] = array(
               'path' => 'user/'. arg(1) .'/buddy',
               'title' => t('my buddys activity'),
               'callback' => 'my_buddy_activity',
               'callback arguments' =>array('user', arg(1)),
               'access' => user_access('access user profiles', 'my buddys activity'),
               'type' => MENU_LOCAL_TASK
             );
...

No tomes a mal que te mande aquí como debiera estar formateado el codigo pero creo que es una ayuda tambien.
Si algún dia contribuyes en Drupal no te queda de otra hacerlo así.

<?php
/**
* Implementation of hook_perm().
*/
function buddysactivity_perm() {
  return array(
'my buddys activity');
}

/**
* Implementation of hook_menu().
*/
function buddysactivity_menu($may_cache) {
 
$items = array();
  if (
$may_cache != true) { 
    if (
arg(0) == 'user')  {
     
$items[] = array(
       
'path' => 'user/'. arg(1) .'/buddy',
       
'title' => t('my buddys activity'),
       
'callback' => 'my_buddy_activity',
       
'callback arguments' =>array('user', arg(1)),
       
'access' => user_access('access user profiles', 'my buddys activity'),
       
'type' => MENU_LOCAL_TASK,
      ); 
    }
  }
  return
$items;
}

/**
* Submit de la información.
*/
function my_buddy_activity (){
  if ((
arg(0) == 'user') && is_numeric(arg(1)) && (arg(2) == 'buddy')) {
   
$arg1 = arg(1);
  }
  else {
   
// Si uno de los datos esperados por la condicion no existen, para que seguir?
   
return '';
  }
 
 
$query="SELECT a.buddy, u.name, u.picture, n.created, n.title, n.nid, n.status
          FROM {users} u, {buddylist} a, {node} n
          WHERE u.uid = a.buddy
          AND a.uid =%d
          AND a.buddy = n.uid
          AND n.status =1
          order by n.created DESC"
;

 
$result = db_query_range($query, $arg1, 0, 30); 
  while (
$data = db_fetch_object($result)) {
   
$list[] = t('@title by @buddy', array(
     
'@title' => l($data->title, base_path() .'node/'. $data->nid, $data->title, $data->title),
     
'@buddy' => l($data->name, base_path().'user/'.$data->buddy, $data->name, $data->name)
    ));
  }
 
 
$attributes = array(
   
'id' => 'pared',
  );
 
 
$output = '<div '. drupal_attributes($attributes) .'>';
 
$output .= theme('item_list', $list, '', 'ul');
 
$output .= '</div>';

 
// Si los datos esperados por la condicion existen pero no hay resultados, para que mandar un div vacio?
 
return !empty($list) ? $output : '';
}
?>

Bueno espero esto ayude.

Saludos desde alemania
Juan Carlos
simple.puntolatinoclub.de