NID из блока views [РЕШЕНО]

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

Аватар пользователя shishka0228 shishka0228 16 июля 2016 в 14:33

Есть блок нод созданный в views, и есть кастомная форма, которая публикует ноду если она не опубликована и выдает ошибку если опубликована. При редактировании ноды эта форма получает nid с помощью arg(1). Как сделать то же самое в блоке ?
Тоисть как мне в views_form_submit получить nid нужной мне ноды?
Грубо говоря функционал похож на удаление ноды прямо из блока views.

Комментарии

Аватар пользователя Orion76 Orion76 17 июля 2016 в 17:59

Распишите подробнее..
Ничего не понятно..
Как кастомная форма связана с блоком и формой редактирования ноды?

Аватар пользователя shishka0228 shishka0228 17 июля 2016 в 22:51

я создал field_hendler для views как для Content:delete
(код field_Content:delete из views)

<?php
class views_handler_field_node_link_delete extends views_handler_field_node_link {

  

/**
   * Renders the link.
   */
  
function render_link($node$values) {
    
// Ensure user has access to delete this node.
    
if (!node_access('delete'$node)) {
      return;
    }

    

$this->options['alter']['make_link'] = TRUE;
    
$this->options['alter']['path'] = "node/$node->nid/delete";
    
$this->options['alter']['query'] = drupal_get_destination();

    

$text = !empty($this->options['text']) ? $this->options['text'] : t('delete');
    return 
$text;
  }
}
?>

тут всё выполняеться данной строкой

<?php
$this
->options['alter']['path'] = "node/$node->nid/delete";
?>

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

Аватар пользователя Orion76 Orion76 18 июля 2016 в 6:44

Вывести ссылку в поле с необходимыми параметрами можно и без кода.
Добавить в вьюс поле с необходимыми значениями (nid ноды)
В настройках поля включить опцию "Переписать значение"
И в поле "Значение" ввести html ссылки вместо nid ноды подставив токен [nid] (список доступных токенов под текстовым полем ниже).

Если Вам необходимо вывести свою форму на отдельной странице, Вам необходимо объявить путь этой страницей и колбэк, выводящий содерожимое страницы(форму) при помощи hook_menu
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...
http://drupal-learning.com/blog/ispolzovanie-hookmenu-dlya-sozdaniya-str...

надо в "page callback" хука указать функцию drupal_get_form
а в "page arguments" - массив с аргументами для drupal_get_form:
имя Вашей функции, генерирующей кастомную форму
номер параметра(nid ноды) из url (нумерация начинается с 0)

ПРимер можно подсмотреть в реализации хука hook_menu в модуле node
файл: node.module
функция: node_menu

Так же много примеров можно скачать тут: https://www.drupal.org/project/examples

Аватар пользователя shishka0228 shishka0228 18 июля 2016 в 20:29

Спасибо за помощь Orion76 но к сожалению это не то что меня интересует
я создал нужную мне форму
alt
вот её код

<?php
class republish_field_handler_republish_node  extends views_handler_field_node_link {
 
   function 
option_definition() {  
    
$options parent::option_definition();
    return 
$options;
  }

  function 

options_form(&$form, &$form_state) {
    
parent::options_form($form$form_state);

    unset(

$form['empty']);
  }
  
  
  function 
render($values) {
     return 
drupal_render(my_form('my_form'));
}
function 
republish_lol_form_submit($form, &$form_state) {
    
$nid=$this->get_value ($values'nid');
    
$node=node_load($nid);
    
    if(
$node->status==1){
    
    
drupal_set_message(t(somo text'));
}else{
    $node->status=1;
    node_save($node);
     rules_invoke_event('
buddylist_add');
}
  }  
}
?>

никак не могу заставить работать sumbit
форма просто не реагирует на нажатие
подскажите пожалуйста в чем проблема

Аватар пользователя Orion76 Orion76 18 июля 2016 в 21:15

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

Это

<?php
function render($values) {
     return 
drupal_render(my_form('my_form'));
}
?>

заменить на это:

<?php
function render($values) {
// $arg1,$arg2,$argN - аргументы(если необходимы), передаваемые в функцию-конструктор формы my_form
// т.е. my_form($form,&$form_state,$arg1,$arg2,$argN)
     
return drupal_render(drupal_get_form('my_form',$arg1,$arg2$argN));
}
?>

Добавить реализацию сабмита формы:

<?php
// Наименование функции FORM_ID_submit, т.е. в нашем случае: my_form_submit
function my_form_submit($form,&$form_state){
// реализация
}
?>
Аватар пользователя shishka0228 shishka0228 19 июля 2016 в 1:12

понял свою ошибку sumbit должен быть в самом module
а можно ли как-то создать форму в field_handler ?
или возможно есть способ вызвать функцию из другого файла ?
P.S. спасибо огромное Orion76 что откликнулись и натолкнули в правильное русло

Аватар пользователя Orion76 Orion76 19 июля 2016 в 9:07

shishka0228 wrote:

а можно ли как-то создать форму в field_handler ?

Врядли, всетаки поля вьюса не для форм расчитаны..
Есть модули для редактирования сущностей во вьюсах.. ("Editable Views" и т.п.)
Посмотрите как там сделано..
Но скорее всего тот же drupal_get_form в рендерере поля..