Не получается разобраться с аргументом Заголовка, уже не бесит!

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

Аватар пользователя Sadchenko Sadchenko 25 марта 2013 в 2:14

Поставил такую задачу, сделать адрес страницы редактирования ноды вида "[type]/[title-raw]/edit" и при нахождении на странице редактирования ноды, отображать эту же ноду прямо над формой редактирования.

С адресом редактирования легко разобрался с помощью
А вот в выводом ноды уже 3-й час бьюсь. Никак не пойму как работают аргументы.
Я пробовал использовать в качестве аргумента заголовок ноды, так как у меня что заголовок, что синоним к нему (который всталяется частью URL/edit) полностью совпадают и по регистру и по символам, так как заголовок всегда прописывается латиницей и с точками вместо пробелов (в настройках PathAuto изменил настройки, чтоб точки не удалялись).

Саму вьюху определяю в Блок и вставляю в регион над Контентом.

Но все равно ничего не работает, либо все ноды выводятся либо ни одной.

Подскажите решение?

Комментарии

Аватар пользователя Sadchenko Sadchenko 25 марта 2013 в 2:40

Может можно пойти обратным путем и сделать наоборот, выводить форму редактирования на странице самой ноды? Через Form API, в котором еще нужно разобраться.

Аватар пользователя Sadchenko Sadchenko 25 марта 2013 в 7:38

Всю ночь проштудировал Form API но так до сих пор толкового решения и не нащел. Везде урывки кода и для того как переопределить форму и только убрать из нее ненузные поля(

Единственное что выучил,что нужно в конце формы добавить

<?php
function render_node_form() {
  
$out  drupal_get_form('node_form');   
  return 
$out;
}
?>

чтоб потом была возможность вывести эту форму в теме ноды.

Хелпми плиз, есть кто живой?

Аватар пользователя mialpet mialpet 25 марта 2013 в 8:45

"Sadchenko" wrote:
Всю ночь проштудировал Form API

Вам hook_menu() нужен, а не формы, если я правильно понимаю, у вас тут какой-то салат из кодинга и готовых модулей.
"Sadchenko" wrote:
Хелпми плиз, есть кто живой?

В Питере в 7 утра обычно все мертвые.

Аватар пользователя mialpet mialpet 25 марта 2013 в 8:57

"Sadchenko" wrote:
Не получается разобраться с аргументом Заголовка, уже не бесит!

Уже пофиг, уже на все пофиг...))))

Аватар пользователя Sadchenko Sadchenko 25 марта 2013 в 19:14

"mialpet" wrote:
Уже пофиг, уже на все пофиг...))))

)))
"mialpet" wrote:
Вам hook_menu() нужен

Нет, мне все таки нужен hook_form_alert или hook_form, чтобы вывести форму редактирвоания матариала на странице самого материала. А как правильно написать ХУК я так и не разобрался.

"mialpet" wrote:
если я правильно понимаю, у вас тут какой-то салат из кодинга

Да был винегрет небольшой, но я от него избавился. Нужно идти правильным путем.

Аватар пользователя mialpet mialpet 26 марта 2013 в 10:39

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

Аватар пользователя Sadchenko Sadchenko 26 марта 2013 в 23:33

Там для 7 друпала, а мне для шестерки нада. Мне нужно всего лишь форму редактирвоания ноды (node/45/edit) вывести на самой странице ноды сразу под содержимым (на node/45)

Аватар пользователя mialpet mialpet 27 марта 2013 в 20:50

"Sadchenko" wrote:
Мне нужно всего лишь форму редактирвоания ноды (node/45/edit) вывести на самой странице ноды сразу под содержимым (на node/45)

И все-таки вам нужен хук меню и даже круче

<?php
function hook_menu_alter(&$items)
{
$items[node/45]['page callback'] = 'node_with_edit';

return 

$items;
}

function 

node_with_edit()
{
$content /* получить содержимое ноды */ ;
$content .= drupal_get_form(/ *узнать как называется форма редактирования ноды */);

return 

$content;
}
?>

Вот вам лопата, удачи!)

Аватар пользователя Sadchenko Sadchenko 27 марта 2013 в 21:05

Спасибо! Кстати node/45 это я просто как пример. Мне нужно выводить на всех нодах типа "page".

Буду копать, еще раз спасибо!

Аватар пользователя mialpet mialpet 27 марта 2013 в 21:12

"Sadchenko" wrote:
Мне нужно выводить на всех нодах типа "page".

Подскажу сразу

<?php
function hook_menu_alter(&$items)
{
$items[node/%]['page callback'] = 'node_with_edit';

return 

$items;
}

function 

node_with_edit()
{
$node /* получаем объект "нода" */ ;
$content /* получить содержимое ноды */ ;
if (
$node->type === 'page')
  {
  
$content .= drupal_get_form(/ *узнать как называется форма редактирования ноды */);
  }

return 

$content;
}
?>

Пожалуйста)

Аватар пользователя Sadchenko Sadchenko 27 марта 2013 в 22:14

Чтото я неправильно накуралесил видать, что не работает

<?php
function hook_menu_alter(&$items)
{
$items[node/%]['page callback'] = 'node_with_edit';

return 

$items;
}

function 

node_with_edit()
{
$node node_load($node->nid);
$content node_view($node);
if (
$node->type === 'page')
  {
  
$content .= drupal_get_form(page_node_form);
  }

return 

$content;
}    
?>

Нашел еще вот такое решение

http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_get_f...

<?php
  
// required for Drupal 6
  
module_load_include('inc''node''node.pages'); 
  
// which nodeform you want
  
$node_type 'YOURNODETYPE';
  
$form_id $node_type '_node_form';
  
// maybe add current users info
  
global $user;
  
// create a blank node
  
$node = array(
    
'uid' => $user->uid,
    
'name' => (isset($user->name) ? $user->name ''),
    
'type' => $node_type,
  );
  
// Invoke hook_nodapi and hook_node
  
node_object_prepare($node);
  
// Or you can also use an exiting node, for example
  // $node = node_load(123);
  // and the display the form:
  
$output drupal_get_form($form_id$node);
?>

А как выводить чтото не пойму, пробовал через render и фигу.

Аватар пользователя Andruxa Andruxa 27 марта 2013 в 23:02

"Sadchenko" wrote:
мне все таки нужен hook_form_alert или hook_form

drupal_get_form вам надо где-нибудь в template_preprocess_node

а hook_menu, это вы не с той стороны полезли гланды удалять

Аватар пользователя Sadchenko Sadchenko 27 марта 2013 в 23:16

"multpix" wrote:
тссс! не мешай им, они почти удалили)))

я так и до хирурга недалеко, если программистом стать не получится.

"Andruxa" wrote:
drupal_get_form вам надо где-нибудь в template_preprocess_node

получается как то так?

<?php
function template_preprocess_node(&$variables) {
    
module_load_include('inc''node''node.pages'); 
  
$node_type 'page';
  
$form_id $node_type '_node_form';
  global 
$user;
  
$node = array(
    
'uid' => $user->uid,
    
'name' => (isset($user->name) ? $user->name ''),
    
'type' => $node_type,
  );
  
node_object_prepare($node);
  
$output drupal_get_form($form_id$node);
}
?>

в самом шаблоне node-page.tpl.php ничего прописывать не надо?

Аватар пользователя mialpet mialpet 27 марта 2013 в 23:26

"multpix" wrote:
тссс! не мешай им, они почти удалили)))

Какой молодец, тема висела без ответа хз сколько, а как только возможность сострить так сразу я тут как тут, молодец!
"Andruxa" wrote:
drupal_get_form вам надо где-нибудь в template_preprocess_node

а hook_menu, это вы не с той стороны полезли гланды удалять


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

Аватар пользователя Sadchenko Sadchenko 27 марта 2013 в 23:35

"mialpet" wrote:
Какой молодец, тема висела без ответа хз сколько

Во во! ток умничать и острить многие горазды... у человека беда (у меня), drupal его не слушается.
Но с другой стороны конечно потрачу времени дофига, набью кучу шишек без посторонней помощи, но как потом буду разбираться епт, но ведь время будет потеряно и проект вместе с ним тоже.

mialpet, за помощь спасибо! Буду дальше юзать.

Аватар пользователя Andruxa Andruxa 28 марта 2013 в 0:18

"Sadchenko" wrote:
получается как то так?

как-то так:

<?php 
function template_preprocess_node(&$variables) {
  
$variables['foo'] = ($variables['type'] == 'mytype') ? drupal_get_form('node_form'node_load($variables['nid'])) : NULL;
}
?>

и как-то так в node.tpl.php:
<?php if ($foo) print render($foo); ?>

Аватар пользователя Sadchenko Sadchenko 28 марта 2013 в 0:29

Fatal error: Cannot redeclare template_preprocess_node() (previously declared in /includes/theme.inc:1983) in /sites/all/themes/main/template.php on line **

Типа говорит что не получается переопределить. И где ошибка?

Аватар пользователя multpix multpix 28 марта 2013 в 0:44

как начал - так и делай:

"Sadchenko" wrote:
Я пробовал использовать в качестве аргумента заголовок ноды

используй аргумент nid
адрес то node/[nid]/edit вне зависимости от псевдонимов.
выводи этот блок на страницах node/*/edit
"Sadchenko" wrote:
Мне нужно выводить на всех нодах типа "page".

фильтр по нужному типу ноды

p.s.
отдельное спс лёхе, повеселил))

Аватар пользователя Andruxa Andruxa 28 марта 2013 в 0:53

"multpix" wrote:
node/*/edit

я придерживаюсь принципа "оно работает - не трожь", если уж так хочется hook_menu, сделай хотя бы под это дело отдельный путь, какой-нибудь node/*/twin_view, оставь /edit в покое

Аватар пользователя Sadchenko Sadchenko 28 марта 2013 в 0:55

"multpix" wrote:
используй аргумент nid

Если идти по этому пути, то я не могу использовать аргументом айдишник, так как у меня pathauto стоит и ссылка на редактирования вида:
[type]/[title-raw]/edit с помощью модуля path_alias_xt.

Я потому и пробовал использовать аргументом title так как у меня что в тайтле что в адресе, одинаково на английском и с точками вместо пробелов.
Например
Тайт: adress.stranici
Страница редактирования: page/adress.stranici/edit

Аватар пользователя multpix multpix 28 марта 2013 в 1:06

"Sadchenko" wrote:
Если идти по этому пути, то я не могу использовать аргументом айдишник

а ты просто попробуй,
и отпишись когда заработает)))

p.s.
точки замени на -

Аватар пользователя Sadchenko Sadchenko 28 марта 2013 в 1:04

"multpix" wrote:
а ты просто попробуй,

Та я бы с радость) но у меня не спроста адрес должен быть именно таким. Это не для удобства и красоты сделано.
Но все равно спасибо за внимание! Буду пробовать либо как ты в первый раз предложил или как Andruxa написал. Как получиться обязательно отпишусь.