Menu Tab для редактирования node на странице User

Главные вкладки

Аватар пользователя devil_phenix devil_phenix 14 мая 2015 в 7:50

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

Как можно это реализовать? У кого есть какие мысли на эту тему?

Спасибо

Комментарии

Аватар пользователя serega111 serega111 14 мая 2015 в 9:23

Через views создаете страницу типа /user/%/user_node с контекстным фильтром и т.д., страницу настройте так, чтобы отображалась как вкладка, с этим модулем можно сделать все поля вьюхи редактируемыми https://www.drupal.org/project/editableviews

Другой вариант - модуль, который создает страницу через hook_menu и отображает форму редактирования ноды на этой странице

Аватар пользователя mamba mamba 14 мая 2015 в 9:42

Вы сайт откуда взяли?
Если её можно просматривать из личного кабинета, то это уже 90% уже готовой задачи. Нужно настроить права на возможность редактирования своих нод у пользователя.
И добавить ссылки на редактирование (зависит от того как сделан вывод своих нод в кабинете).

Аватар пользователя serega111 serega111 14 мая 2015 в 14:32

Подробно о hook_menu
В page callback загружаете ноду (допустим по автору) и выводим форму редактирования для нее.

<?php
global $user;
$result = new EntityFieldQuery()->entityCondition('entity_type''node')
           ->
propertyCondition('author'$user->uid)
           ->
execute();
if (!empty(
$result['node'])) {
  
$node node_load(reset($result['node']));
  return 
drupal_get_form($node->type '_node_form'$node);
}
else {
  return 
node_add('my_node_type');
}
?>

Так у вас будет страница с формой редактирования ноды либо пустой формой, если нода еще не создана

Аватар пользователя devil_phenix devil_phenix 16 мая 2015 в 13:20

Теперь другая проблема
Когда я указываю такой путь $items['user/%/node/edit'] = array( - то ничего не работает
А когда указываю явно uid пользователя $items['user/1/node/edit'] - то работает...

хук такой получился

function edit_node_tab_menu() {

$items['user/%/node/edit'] = array(
// 'access arguments' => array('view own profile'),
'page callback' => 'custom_call_node_edit',
'type' => MENU_DEFAULT_LOCAL_TASK,
'page arguments' => array(2),
);

return $items;

}

Подскажите в чем может быть проблема?

Аватар пользователя serega111 serega111 16 мая 2015 в 15:59
<?php
function edit_node_tab_menu() {
$items['user/%user/node_edit'] = array(
// 'access arguments' => array('view own profile'),
'page callback' => 'edit_node_tab_page',
'type' => MENU_LOCAL_TASK,
'page arguments' => array(1),
);
return 
$items;
}
?>

1. %user означает, что в будет вызван метод user_load и колбек будет передан уже объект user, а не просто его id.
2. все методы должны начинаться с имени модуля. Если имя модуля node_edit_tab, то и имя колбека должно начинаться с node_edit_tab
3. Чтобы появился таб, нужно, чтобы кол-во элементов в URI совпадало с кол-вом элементов в URI других табов. То есть, уже есть вкладка для user/%user/view и user/%user/edit, ваша вкладка отобразится только если путь user/%user/node_edit, а не user/%user/node/edit. Если очень нужен именно такой путь, то юзайте алиасы
4. Дефолтный таб уже выставлен для user/%user/view (см модуль юзер). Если хотите установить свой таб как дефолтный (отображающийся на страницу user/%user), то нужно добавить hook_menu_alter, поменять тип для user/%user/view. Хотя вряд ли вам это надо

Аватар пользователя serega111 serega111 16 мая 2015 в 20:05

Добавьте еще вот эти параметры.

<?php
'title' => t('Edit my node'),
'access callback' => true,
?>

Как именно не хочет работать? Страница отображается или нет, что в логах? Кэш после обновления кода чистили?
Код рабочий, я уверен. Где что-то у вас ошибка

Аватар пользователя devil_phenix devil_phenix 16 мая 2015 в 20:34

У меня по сути есть views, с помощью него я создаю таб для редактирования... в модуле хочу перебить путь и вывести форму редактирования ноды... там идет завязка с uid... одна нода на каждого пользователя. Мне надо отобразить форму редактирования ноды на странице пользователя. Что бы все табы и страница осталась прежней, а в контентной части была форма редактирования.

Аватар пользователя serega111 serega111 18 мая 2015 в 15:18

Тогда еще так

<?php
edit_node_tab_menu_alter
(&$items) {
  
$items['user/%user/view'] = array_merge($items['user/%user'], $items['user/%user/view']);
  
$itesm['user/%user/view']['type'] = MENU_LOCAL_TASK;

  

$items['user/%user'] = array(
    
'title' => 'My title',
    
'page callback' => 'edit_node_tab_page',
    
'page arguments' => array(1),
    
'access callback' => TRUE// ваши параметры доступа
    //'access arguments' => array(1), //ваши параметры доступа
  
);
}

edit_node_tab_menu() {
  
$items['user/%user/edit_node'] = array(
    
'title' => 'Edit node',
    
'type' => MENU_DEFAULT_LOCAL_TASK,
    
'weight' => -11,
  );
}
?>