Создание (программно) простого текстого поля, ссылки, кнопки можно делать через довавление фейкового поля с помощью hook_node_view() и hook_field_extra_fields()
Ну есть поля которые заполняет автор, это понятно.
Другие - нужно же где-то выводить динамическую информацию, привязывать ее к чему-то.
Через что еще делать? Собирать страницу их представлений?
Ну и да код там-же хранил. Для разработки (особенно когда никогда ранее друпал/пхп/сайты не занималься)) удобно.
Вот по тихоньку разобрался (спасибо всем кто помог) и уже можно делать как надо.
Если бы сразу в модули направили - то вряд ли бы осилил.
Мене в полях хранить нечего. Они у меня должны выдавать значения динамически. То есть я пока там (с включенным php фильтром) "храню" php код который все это делает и в них же выводит.
Примеров много, но либо с кусками кода, который не понятно как склеивать, либо пример заточен под какую-то специфическую задачу что там вообще черт ногу сломит.
Далее что одни предлагают способ с хук-меню - но без Drupal.ajax, другие с ним.
Вот разобрался с первым более простым. Привожу без всяких довесов, но все 3 файла сразу и целиком.
с помощью js подхавываются данные со страницы (в данном случае с профиля) отправляются на сервер, обрабатываются и возвращается результат в js
То есть как "все в поля"?
php код в поля - так тогда те 3 тяжелых нужно будет грузить и в каждом поле отдельно
или я не понял?
пока намереваюсь переносить код в модули (и если там объект ноды уже есть - то еще лучше) и буду программно заполнять результатами созданные ранее поля
field_permission - по немногу использую - но он делает только ограничения в сторону от автора
а мне как раз наоборот, всем нужно посказать генерируемые ссылки, итерактивные объекты а автору они никчему
Есть код который генерирует ссылки в из данных автора. Такое я думаю надо во время создания/редактирования ноды собрать и сохранить в полях уже как ссылки.
Для это нужен hook_node_presave($node)?
Но даже они должны показываться или нет в зависимости это автор просматривает или нет.
то есть мне постоянно приходится проверять
if ($user->uid <> $node->uid)
только ворнинги
Warning: end() [function.end]: Passed variable is not an array or object в функции eval() (строка 3 в файле C:\OpenServer\domains\localhost\xxxxxx.org\modules\php\php.module(80) : eval()'d code).
это если вставлять в поле c PHP кодом
в Computed field - там все через $entity_field[0]['value'] делать надо (по конструкции модуля)
Спасибо, почти убедил. (( Придется пытаться понять Друпал.
Материала хватает, но весь какой-то механический. Это туда, это сюда. Не один раз смотрел на друпаловские методы - могу понять почему это работает. И делать так соответственно не хочется.
Я обычным ajax c первого раза все стало понятно.
в форме создания ноды выбирали термин таксономии с помощью Hierarchical Select
так нужно это же самое чтоб было возможно для "всех" в уже готовой ноде (при ее просмотре)
ничего большего действия а сам через яваскрипт и ajax прикручу
Все так, только не думал что вместо того чтобы дописывать то что нужно, используя базвые инструменты - прийдется "пилить" сами эти инструменты.
Если вас послушать то и views пользоваться не нужно, а самому все писать, чтоб было именно то что нужно.
Если него дельного сказать, так и делайте, - ничего не говорите.
По вашему станицы должны быть статическими, а интерактивность в виде селекта - это нечто нестандартное, узкоспецифическое что нужно с нуля писать.
Спашиваю тех кто с этим сталкивался и у кого есть наработки по этому вопросу.
Спасибо, помогли. ))
Если бы я знал что нужно делать, я бы это делал, а не спарашивал тут у знатаков как и чего не надо делать.
Я ущу выход из ситуации отсутствия в Друпале элементарного функционала. И если вам он тоже не известен (или лень его искать) то .... помогите там где реально можете помочь.
Вопрос в понимании как работает Друпал. Почему одно и тоже поле в форме работает одним образом, а в ноде другим (хотя в exposed filter работает как в форме). Что этим управляет?
Да, спасибо. Именно то что я хотел увидеть. Страно что нет оригинальных модулей под это. Установил. Но он работает только как приемер.
Ему еще надо сделать новый тип поля. Глянул сюда http://internetdevels.ru/blog/module-with-field-api-drupal-7 и понял что для меня это еще рановато )).
Но должна же быть возможность его вызывать прямо из поля с php фильтом?
Попробовал прописать запускающую функцию example_hs_menu(); - но не сработало
не так все просто как в примере с остатками на складе
еще кучу всяких дополнительных действий надо сделать - запросы по вебсокет на другие сервера
мне нужен маленький инструментик типа http://htmlbook.ru/html/optgroup - продвинутая форма селект
но чтоб там было два поля выбора: родительское и дочернее отдельно
и чтоб я туда мог словарь таксономии вогнать - (все это делает Hierarchical Select) остальное я лучше руками чем из пушки по воробьям.
Для чего? Нечто вроде ubercart_marketplace своими руками )).
Например, интерактивно запросить чего (термин таксономии) и сколько (данные в базе) у продавца на складе.
На странице футболок, запросить сколько из них синих XXL на складе.
define('DRUPAL_ROOT', $_SERVER['DOCUMENT_ROOT']); //added to make sure its defined as we're outside the use of index.php
chdir(DRUPAL_ROOT);
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
ну и в конце не забыть вернуть JSON по друпаловски
return drupal_json_output($res);
Так все таки можно, хоть и не рекомендуется. Но мене он пока кажется самым простым.
http://www.drupal.ru/node/108320
"4 способ(из серии "как делать нельзя"), прикручиваете js, где на событие change цепляете аякс запрос к некоему скрипту(обычный php файл), в который и запихиваете ваш код. Эдакий битрикс стайл."
Понял что сделал подключение ajax в общем случае, не как в друпале заведено.
Я создал его отдельным файлом ajax.php в друпал это должно быть модулем (или в модуле). Вот он его и не видет должным образом.
Куда лучше помещать php код?
Должен сказать что $node не подгрузилась автоматически в hook_node_view_alter()
Интерактивный выбор термина в ноде
Создание (программно) простого текстого поля, ссылки, кнопки можно делать через довавление фейкового поля с помощью hook_node_view() и hook_field_extra_fields()
Куда лучше помещать php код?
Похоже что понял.
Спасибо.
Если пользовательскую функцию вызывать из хуков то "все" что нужно подгружается автоматически.
Хух, ну тогда жить можно. ))
Куда лучше помещать php код?
Ну есть поля которые заполняет автор, это понятно.
Другие - нужно же где-то выводить динамическую информацию, привязывать ее к чему-то.
Через что еще делать? Собирать страницу их представлений?
Ну и да код там-же хранил. Для разработки (особенно когда никогда ранее друпал/пхп/сайты не занималься)) удобно.
Вот по тихоньку разобрался (спасибо всем кто помог) и уже можно делать как надо.
Если бы сразу в модули направили - то вряд ли бы осилил.
Видит ли ajax arg() ?
О, СПАСИБО! - это вариант!
Отравил в яваскрипт, от туда по ajax в my_module_menu_ajax_callback().
Как-нибудь, когда прийдет мое время, пойму как это делать в php, отпишусь.
Куда лучше помещать php код?
Мене в полях хранить нечего. Они у меня должны выдавать значения динамически. То есть я пока там (с включенным php фильтром) "храню" php код который все это делает и в них же выводит.
Вот думал что правильнее его вынести в одно место и от туда программно заполнять поля.
Вот еще такие доводы http://rxb.name/blog/pochemu-ya-protiv-koda-v-blokah-i-nodah-i-modulya-p...
так заполнять чем?
hook_user_view_alter
hook_node_view_alter
Видит ли ajax arg() ?
Мне нужен nid ноды и/или uid хозяина профиля.
Обычно (в полях с php фильтром) получал его их аргумента. И всегда был внутрений путь.
Видит ли ajax arg() ?
добавил в модуль
function user_uid_glob_init(){
global $user_uid_glob_outopt;
$user_uid_glob_outopt = arg(1);
print_r($user_uid_glob_outopt);
}
print_r($user_uid_glob_outopt); - не сработало
user_uid_glob_init(); - выдавало не uid пользователя, а name - это заначит разрешния не выставлены?
Видит ли ajax arg() ?
не работает agr() под my_module_menu_ajax_callback()
а под my_module_user_view_alter(&$build) работает
и протащить эту как переменную через global тоже не получается,
прописывал my_module_user_view_alter(&$build)
global $user_uid_glob;
$user_uid_glob = arg(1)
print_r ($user_uid_glob);
и потом в my_module_menu_ajax_callback()
global $user_uid_glob; // пробал сначала без этой строки
print_r ($user_uid_glob);
ничего не вышло
как-то через классы можно, но похоже что проблема в друпале
Видит ли ajax arg() ?
Примеров много, но либо с кусками кода, который не понятно как склеивать, либо пример заточен под какую-то специфическую задачу что там вообще черт ногу сломит.
Далее что одни предлагают способ с хук-меню - но без Drupal.ajax, другие с ним.
Вот разобрался с первым более простым. Привожу без всяких довесов, но все 3 файла сразу и целиком.
с помощью js подхавываются данные со страницы (в данном случае с профиля) отправляются на сервер, обрабатываются и возвращается результат в js
все в папуку /sites/default/modules/my_module
my_module.info
Куда лучше помещать php код?
То есть как "все в поля"?
php код в поля - так тогда те 3 тяжелых нужно будет грузить и в каждом поле отдельно
или я не понял?
пока намереваюсь переносить код в модули (и если там объект ноды уже есть - то еще лучше) и буду программно заполнять результатами созданные ранее поля
field_permission - по немногу использую - но он делает только ограничения в сторону от автора
а мне как раз наоборот, всем нужно посказать генерируемые ссылки, итерактивные объекты а автору они никчему
Куда лучше помещать php код?
Есть код который генерирует ссылки в из данных автора. Такое я думаю надо во время создания/редактирования ноды собрать и сохранить в полях уже как ссылки.
Для это нужен hook_node_presave($node)?
Но даже они должны показываться или нет в зависимости это автор просматривает или нет.
то есть мне постоянно приходится проверять
if ($user->uid <> $node->uid)
Получить первое поле из Double Fields
так тоже пробовал - ничего не выдало в поле
только ворнинги
Warning: end() [function.end]: Passed variable is not an array or object в функции eval() (строка 3 в файле C:\OpenServer\domains\localhost\xxxxxx.org\modules\php\php.module(80) : eval()'d code).
это если вставлять в поле c PHP кодом
в Computed field - там все через $entity_field[0]['value'] делать надо (по конструкции модуля)
попробовал
Видит ли ajax arg() ?
Спасибо, почти убедил. (( Придется пытаться понять Друпал.
Материала хватает, но весь какой-то механический. Это туда, это сюда. Не один раз смотрел на друпаловские методы - могу понять почему это работает. И делать так соответственно не хочется.
Я обычным ajax c первого раза все стало понятно.
Интерактивный выбор термина в ноде
Подождем того кто помимо советов того что можно и нельзя - даст дельный совет как это можно.
Спасибо и на том, а ведь мог бы и .... ))
То что можно, я и сам это понимаю. Не писал бы сюда о полетах на Марс.
Интерактивный выбор термина в ноде
не могу понять что тут можно уточнить
в форме создания ноды выбирали термин таксономии с помощью Hierarchical Select
так нужно это же самое чтоб было возможно для "всех" в уже готовой ноде (при ее просмотре)
ничего большего действия а сам через яваскрипт и ajax прикручу
Интерактивный выбор термина в ноде
Все так, только не думал что вместо того чтобы дописывать то что нужно, используя базвые инструменты - прийдется "пилить" сами эти инструменты.
Если вас послушать то и views пользоваться не нужно, а самому все писать, чтоб было именно то что нужно.
Если него дельного сказать, так и делайте, - ничего не говорите.
По вашему станицы должны быть статическими, а интерактивность в виде селекта - это нечто нестандартное, узкоспецифическое что нужно с нуля писать.
Спашиваю тех кто с этим сталкивался и у кого есть наработки по этому вопросу.
Интерактивный выбор термина в ноде
Спасибо, помогли. ))
Если бы я знал что нужно делать, я бы это делал, а не спарашивал тут у знатаков как и чего не надо делать.
Я ущу выход из ситуации отсутствия в Друпале элементарного функционала. И если вам он тоже не известен (или лень его искать) то .... помогите там где реально можете помочь.
Вопрос в понимании как работает Друпал. Почему одно и тоже поле в форме работает одним образом, а в ноде другим (хотя в exposed filter работает как в форме). Что этим управляет?
Интерактивный выбор термина в ноде
Да, спасибо. Именно то что я хотел увидеть. Страно что нет оригинальных модулей под это. Установил. Но он работает только как приемер.
Ему еще надо сделать новый тип поля. Глянул сюда http://internetdevels.ru/blog/module-with-field-api-drupal-7 и понял что для меня это еще рановато )).
Но должна же быть возможность его вызывать прямо из поля с php фильтом?
Попробовал прописать запускающую функцию example_hs_menu(); - но не сработало
Интерактивный выбор термина в ноде
Пока на яваскрипте/html собрал форму
взял здесь http://myweb.tiscali.co.uk/cornford/example_scripts/dependent_select.html
Интерактивный выбор термина в ноде
не так все просто как в примере с остатками на складе
еще кучу всяких дополнительных действий надо сделать - запросы по вебсокет на другие сервера
мне нужен маленький инструментик типа http://htmlbook.ru/html/optgroup - продвинутая форма селект
но чтоб там было два поля выбора: родительское и дочернее отдельно
и чтоб я туда мог словарь таксономии вогнать - (все это делает Hierarchical Select) остальное я лучше руками чем из пушки по воробьям.
Интерактивный выбор термина в ноде
Но, вот тут это реализованно. http://wimleers.com/demo/hierarchical-select/taxonomy
Это не форма, а нода. Используется именно Hierarchical Select даже видно как ajax работает.
Для чего? Нечто вроде ubercart_marketplace своими руками )).
Например, интерактивно запросить чего (термин таксономии) и сколько (данные в базе) у продавца на складе.
На странице футболок, запросить сколько из них синих XXL на складе.
Ajax 500 (Internal Server Error) PHP Fatal error: Call to undefined function
решено, ответ здесь https://www.drupal.org/node/2182879
для тех кто хочет вешать Ajax не по друпаловски
в начало php файла надо добавить
define('DRUPAL_ROOT', $_SERVER['DOCUMENT_ROOT']); //added to make sure its defined as we're outside the use of index.php
chdir(DRUPAL_ROOT);
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
ну и в конце не забыть вернуть JSON по друпаловски
return drupal_json_output($res);
Ajax 500 (Internal Server Error) PHP Fatal error: Call to undefined function
Так все таки можно, хоть и не рекомендуется. Но мене он пока кажется самым простым.
http://www.drupal.ru/node/108320
"4 способ(из серии "как делать нельзя"), прикручиваете js, где на событие change цепляете аякс запрос к некоему скрипту(обычный php файл), в который и запихиваете ваш код. Эдакий битрикс стайл."
Ajax 500 (Internal Server Error) PHP Fatal error: Call to undefined function
Понял что сделал подключение ajax в общем случае, не как в друпале заведено.
Я создал его отдельным файлом ajax.php в друпал это должно быть модулем (или в модуле). Вот он его и не видет должным образом.