[РЕШЕНО] Как использовать Prepopulate для нестандартных структур типа Ubercart ИЛИ Как увидеть переменные в node/add/product?

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

Аватар пользователя Serg1983 Serg1983 1 сентября 2010 в 22:44

Добрый день.

Мучаю Ubercart и его дефолтный тип product. Добавил в page.tpl.php (который в папке темы) кусок

<?php

dprint_r($node);

?>

для просмотра массивов/переменных.

Однако при создании новых нод этого типа (node/add/product) вывода

stdClass Object
(
[nid] => 23
[type] => product
[language] => ru
[uid] => 6
[status] => 1
.....

нет.

Подскажите плз, куда сунуть dprint_r чтобы он появился.

Спасибо.

Комментарии

Аватар пользователя annya@drupal.org annya@drupal.org 2 сентября 2010 в 2:51

Вы почитайте в каких тплках доступны какие переменные, как они формируются и что такое препроцессы. А скажите, как у Вас нас странице node/add/product(страница добавления продукта) может быть уже СОЗДАННЫЙ объект ноды?

Аватар пользователя Serg1983 Serg1983 2 сентября 2010 в 12:45

"<a href="mailto:annya@drupal.org">annya@drupal.org</a>" wrote:
Вы почитайте в каких тплках доступны какие переменные, как они формируются и что такое препроцессы. А скажите, как у Вас нас странице node/add/product(страница добавления продукта) может быть уже СОЗДАННЫЙ объект ноды?

Один из основных принципов ООП: инициализация переменной через ее создание как экземпляра класса, и только потом - заполнение/инициализация полей и т.п., далее удаление переменной при отказе сохранения или постинг в БД ее данных при сохранении. В наличии многолетний опыт ООП (Delphi), но в Drupal-е такая специфика, что мозг выносит...

Объясню подробнее к чему все это: использую модуль Prepopulate для заполнения полей ноды. С ССК полями работает:

(node/add/product?edit[field_probeg][0][value]=ABCDEFG - в поле вносится ABCDEFG ),

с, например, title тоже (node/add/product?edit[title]=ABCDEFG - вносит в тему ABCDEFG)

Взрыв мозга начинается тут: вывожу переменные в node/edit :

[nid] => 23
[type] => product
[language] => ru
[uid] => 6
[status] => 1
[created] => 1282495682
[changed] => 1283364450
[comment] => 0
[promote] => 1
[moderate] => 0
[sticky] => 0
[tnid] => 0
[translate] => 0
[vid] => 23
[revision_uid] => 1
[title] => Лот 23
[body] =>
[teaser] =>
[log] =>
[revision_timestamp] => 1283364450
[format] => 0
[name] => Сергей
[picture] =>
[data] => a:2:{s:24:"uc_auction_notify_outbid";i:1;s:13:"form_build_id";s:37:"form-c7083eaf6c7a2b62ec01f7a8b288eb2c";}
[model] => AAA
[list_price] => 0.00000
[cost] => 0.00000
[sell_price] => 1.00000

sell_price (уберкартовское) и title находятся на одном уровне, однако ?edit[title]=ABCDEFG - работает, ?edit[sell_price]=1 - нет.

Первоначальный вопрос задан из подозрения что node/add/product формирует объект НЕ с такой структурой полей, поэтому обращение edit[sell_price] (напрямую) неверно, поэтому спросил как посмотреть структуру полей в node/add/product.

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

Вопрос: как определяется очередность выполнения хуков? Где почитать?

Аватар пользователя annya@drupal.org annya@drupal.org 3 сентября 2010 в 1:45

Serg1983 Delphi это среда прикладного программирования на языке OBJECT Pascal(то есть объектно-ориентированном). А Drupal это веб-фреймворк для создания сайтов написанный на языке PHP, и при этом когда формировалось ядро с-мы реализация объектно-ориентированного подхода в Php была слабой. Так что почувствуйте разницу...
Прочитайте раздел ридми. Там есть пункт Special cases. Думаю проблема в этом.

Аватар пользователя Serg1983 Serg1983 4 сентября 2010 в 14:03

Проблема решилась чтением issues на http://drupal.org/project/prepopulate.

Суть проблемы: представление структуры в dprint_r($node) - это одно, а структура доступа к значениям в ссылке для Prepopulate - другое в силу специфики модуля.

Проблема решается установкой патча для Prepopulate, который при добавлении в ссылку параметра prepopulate-debug выводит список полей формы в виде, необходимом для модуля.

Например,

dprint_r($node)

выводит

[nid] => 23
[type] => product
[language] => ru
[uid] => 6
...
[model] => AAA
[list_price] => 0.00000
[cost] => 0.00000
[sell_price] => 1.00000

а prepopulate-debug

edit[nid] (value)
edit[vid] (value)
edit[uid] (value)
...
edit[base][model] (textfield)
edit[base][prices][list_price] (textfield)
edit[base][prices][cost] (textfield)
edit[base][prices][sell_price] (textfield)

т.о., предустановка значений к model и sell_price определяется так:

product?edit[base][model]=A&edit[base][prices][sell_price]=1

Надеюсь, ответ поможет еще кому-нибудь и сбережет кучу времени, которую потратил я, пытаясь все это выяснить.

Аватар пользователя AI AI 11 апреля 2011 в 7:15

Огромное спасибо Smile
Буду рыть дальше, вектор для лопаты вы задали. А то не знал вообще каким образом подступиться к проблеме.