Есть блок нод созданный в views, и есть кастомная форма, которая публикует ноду если она не опубликована и выдает ошибку если опубликована. При редактировании ноды эта форма получает nid с помощью arg(1). Как сделать то же самое в блоке ?
Тоисть как мне в views_form_submit получить nid нужной мне ноды?
Грубо говоря функционал похож на удаление ноды прямо из блока views.
Комментарии
Распишите подробнее..
Ничего не понятно..
Как кастомная форма связана с блоком и формой редактирования ноды?
я создал field_hendler для views как для Content:delete
(код field_Content:delete из views)
<?php
/**
$this->options['alter']['make_link'] = TRUE;
$text = !empty($this->options['text']) ? $this->options['text'] : t('delete');
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']['path'] = "node/$node->nid/delete";
$this->options['alter']['query'] = drupal_get_destination();
return $text;
}
}
?>
тут всё выполняеться данной строкой
<?php
$this->options['alter']['path'] = "node/$node->nid/delete";
?>
у меня есть своя кастомная форма в нодах
но я никак не могу понят как мне тоже сделать свою форму как ссылку
Вывести ссылку в поле с необходимыми параметрами можно и без кода.
Добавить в вьюс поле с необходимыми значениями (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
Спасибо за помощь Orion76 но к сожалению это не то что меня интересует
я создал нужную мне форму
вот её код
<?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
форма просто не реагирует на нажатие
подскажите пожалуйста в чем проблема
Откуда же я мог знать, что Вы форму в выводе вьюса выводите..
Это
<?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){
// реализация
}
?>
спасибо, теперь форма стала активна но submit всё равно не выполняет ничего
возможно есть иной способ ?
понял свою ошибку sumbit должен быть в самом module
а можно ли как-то создать форму в field_handler ?
или возможно есть способ вызвать функцию из другого файла ?
P.S. спасибо огромное Orion76 что откликнулись и натолкнули в правильное русло
Врядли, всетаки поля вьюса не для форм расчитаны..
Есть модули для редактирования сущностей во вьюсах.. ("Editable Views" и т.п.)
Посмотрите как там сделано..
Но скорее всего тот же drupal_get_form в рендерере поля..