Поставил такую задачу, сделать адрес страницы редактирования ноды вида "[type]/[title-raw]/edit" и при нахождении на странице редактирования ноды, отображать эту же ноду прямо над формой редактирования.
С адресом редактирования легко разобрался с помощью
А вот в выводом ноды уже 3-й час бьюсь. Никак не пойму как работают аргументы.
Я пробовал использовать в качестве аргумента заголовок ноды, так как у меня что заголовок, что синоним к нему (который всталяется частью URL/edit) полностью совпадают и по регистру и по символам, так как заголовок всегда прописывается латиницей и с точками вместо пробелов (в настройках PathAuto изменил настройки, чтоб точки не удалялись).
Саму вьюху определяю в Блок и вставляю в регион над Контентом.
Но все равно ничего не работает, либо все ноды выводятся либо ни одной.
Подскажите решение?
Комментарии
Может можно пойти обратным путем и сделать наоборот, выводить форму редактирования на странице самой ноды? Через Form API, в котором еще нужно разобраться.
Всю ночь проштудировал Form API но так до сих пор толкового решения и не нащел. Везде урывки кода и для того как переопределить форму и только убрать из нее ненузные поля(
Единственное что выучил,что нужно в конце формы добавить
<?php
function render_node_form() {
$out = drupal_get_form('node_form');
return $out;
}?>
чтоб потом была возможность вывести эту форму в теме ноды.
Хелпми плиз, есть кто живой?
Вам hook_menu() нужен, а не формы, если я правильно понимаю, у вас тут какой-то салат из кодинга и готовых модулей.
В Питере в 7 утра обычно все мертвые.
Уже пофиг, уже на все пофиг...))))
)))
Нет, мне все таки нужен hook_form_alert или hook_form, чтобы вывести форму редактирвоания матариала на странице самого материала. А как правильно написать ХУК я так и не разобрался.
Да был винегрет небольшой, но я от него избавился. Нужно идти правильным путем.
Лично мне трудно разобратся что и после чего и где и как вы делали, а потому могу посоветовать только это, хотя апи.друпал.орг поточнее будет, но я лично ненавижу инфу оттуда брать, у них там сам черт ногу сломит!
Там для 7 друпала, а мне для шестерки нада. Мне нужно всего лишь форму редактирвоания ноды (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;}
?>
Вот вам лопата, удачи!)
Спасибо! Кстати node/45 это я просто как пример. Мне нужно выводить на всех нодах типа "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;}
?>
Пожалуйста)
О спасибо за прокачку лопаты!
Чтото я неправильно накуралесил видать, что не работает
<?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 и фигу.
Слово hook надо менять на название модуля.
drupal_get_form вам надо где-нибудь в template_preprocess_node
а hook_menu, это вы не с той стороны полезли гланды удалять
тссс! не мешай им, они почти удалили)))
я так и до хирурга недалеко, если программистом стать не получится.
получается как то так?
<?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 ничего прописывать не надо?
Какой молодец, тема висела без ответа хз сколько, а как только возможность сострить так сразу я тут как тут, молодец!
Ну с профессионалами я спорить не буду, если уж так говорят значит пусть будет так.
Во во! ток умничать и острить многие горазды... у человека беда (у меня), drupal его не слушается.
Но с другой стороны конечно потрачу времени дофига, набью кучу шишек без посторонней помощи, но как потом буду разбираться епт, но ведь время будет потеряно и проект вместе с ним тоже.
mialpet, за помощь спасибо! Буду дальше юзать.
как-то так:
<?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); ?>
Fatal error: Cannot redeclare template_preprocess_node() (previously declared in /includes/theme.inc:1983) in /sites/all/themes/main/template.php on line **
Типа говорит что не получается переопределить. И где ошибка?
вот она:
вдумчиво курим маны
как начал - так и делай:
используй аргумент nid
адрес то node/[nid]/edit вне зависимости от псевдонимов.
выводи этот блок на страницах node/*/edit
фильтр по нужному типу ноды
p.s.
отдельное спс лёхе, повеселил))
я придерживаюсь принципа "оно работает - не трожь", если уж так хочется hook_menu, сделай хотя бы под это дело отдельный путь, какой-нибудь node/*/twin_view, оставь /edit в покое
Если идти по этому пути, то я не могу использовать аргументом айдишник, так как у меня pathauto стоит и ссылка на редактирования вида:
[type]/[title-raw]/edit с помощью модуля path_alias_xt.
Я потому и пробовал использовать аргументом title так как у меня что в тайтле что в адресе, одинаково на английском и с точками вместо пробелов.
Например
Тайт: adress.stranici
Страница редактирования: page/adress.stranici/edit
а ты просто попробуй,
и отпишись когда заработает)))
p.s.
точки замени на -
Та я бы с радость) но у меня не спроста адрес должен быть именно таким. Это не для удобства и красоты сделано.
Но все равно спасибо за внимание! Буду пробовать либо как ты в первый раз предложил или как Andruxa написал. Как получиться обязательно отпишусь.
да псевдоним это хорошо,
но машинный адрес node/%/edit никуда не делся)))
Хорошо попробую!)
Дмитрий, 300р. и будет вам модуль который выполняет вашу задачу, только установи и галочку поставь.
П.С. У нас тут такой топик есть: Передовики-друпалурги