Единственная трудность возникла ограничить тех кому не надо в том чтобы ставить/менять глобальные флаги
если делать через родную функцию модуля access - то и блокируется флаг полностью (с отображением)
также настройка "Users may only flag content they own" - (что можно было использовать для участников) - блокирует отображение глобального флага для всех "не хозяев".
Пришлось добавить пару строк в flag.module в function template_preprocess_flag(&$variables)
для взаимодействия "администратор-пользователи" - это вариант.
тут же пользователи взаимодействуют между собой и каждый "хозяин" только своей ноды.
т.е. у организатора (OG "массовая закупка") нет прав редактировать заказы участников закупки. Да и не нужны они ему, так как он не может принимать решения за них.
А если для заказа комментарии к закупке использовать?...
думал об этом, но так как уже использовались OG - то уже приделал к ним
сделал вывод представления под "массовой закупкой" с выводом всех заказов и агрегацией суммы
через Global PHP внедрил перерасчет цены (от количества общего заказа) и сумму к оплате для каждого участника
в одном из вариантов так оно и может быть соц сеть с элементами сотрудничества.
тут речь идет о специализированном сервисе для идейных людей, кооператоров, коммунаров. Для них это практически часть трудового процесса. Так что пока что важнее функционал.
то есть с нуля ее сделать?
нода должна запоминить кто и что ввел в поле.
не могли бы ссылку дать на подобное, или модуль который работает аналогичным образом.
Через Entity Ref. prepopulate via URL: как сделать по типу basic cart - добавление "заказа". Как-то не серьезно для того чтоб одну цифру ввести переходить на создание ноды? Через программное создание ноды с получением количества через Ajax?
Через field_collection - как другие пользователи смогут добавлять свои данные в чужую ноду? Можно дать права всем править поля в таком-то типе содержимого. Но как еще при этом запретить не менять чужие данные?
разобрался в чем было дело.
друпаловаский ajax создает серию своих js файлов и если есть свои js файлы работающие с ajax - то получается такая каша.
решил перенести свой ajax запрос внутрь ajax обрабатывающего селект, - в xxxxxx_form_ajax_callback
Все будто бы получается. Но туда нужно также передать и uid просматриваемого профиля. Так как axaj постоянно использует адресную строку то получить из arg() или любой другой метод по адресу - не выходит.
Сменил хук вызывающий js с hook_user_view_alter(&$build) на hook_init() - не помогло.
Оставил старый селект (собраный вручную из html+js) и рядом подклячил HS на ajax.
Старый работает нормально - по выбору и клику по кнопке запускает нужный ajax запрос.
Но стоит тронуть HS и затем вызвать ajax по старому селекту - сразу идут 10 запросов.
Понял что проблема связана с HS виджетом.
Если он влючен, то при загрузке странцы файл яваскрипта ajax запроса запускается сразу несколько раз. И далее каждый раз при выборе термина запускаются еще запускается по несколько раз. Когда жму кнопку ajax запроса - то соответственно срабатывают весь десяток "висящих" яваскриптов и делается десяток ajax запрсов.
Я так понимаю что это ajax виджет постоянно перестраивает страницу и каждый раз вызывает hook_user_view_alter(&$build) через который я подгружаю яваскрипт.
Получилось.
Пока напишу в общем, так как есть одна ошибка.
Создал поле с помощью function hook_field_extra_fields()
Передал ему форму виджета HS select из http://xandeadx.ru/blog/drupal/446 с помошью hook_user_view()
из виджета а убрал кнопку Submit и ее callback
"Надо тогда и чтоб модуль сам заполнял поля при подготовке ноды к показу.
Как тогда лучше оставить поля какие использовал, но их почистить от php кода. А модулями для каждого типа ноды программно заполнять поля?
Или же вообще их удалить и все даже создавать их программно?
Какими хуками это делается (вариант с модулями)?
hook_user_view_alter
hook_node_view_alter"
Если кто-то из присутствующих никогда не говил "хук", а пользовался как положено - "великим и могучим" - пусть бросит в меня грязью.))
Ну, а если серьезно то русский язык так и развивается тем что впитывает иностранные слова выделяя им более конкретнее понятия, а общиее при этом остаются не такими загуженными.
А если копнете поглубже то вообще исконно словянских слов даже не половина. Даже "тарелка" у нас немецкая.
Подобная история и с Английским - весь культурный и деловой язык был добавлен норманами.
Похоже что ajax не видит язык интерфейса, язык в пути, но видит язык по умолчанию в профиле пользователя. Язык ноды видит тоже, но нужно ведь чтоб выдавал пререводы на том языке что пользователь выбрал в данный момент.
Мог бы его указать явно t('blabla', array(), array('langcode' => $langcode));
но откуда его взять $langcode? - если в $GLOBALS тоже нужного языка(ru) нигде нет, хотя в url стоит ru и выбран русский интерфейс.
Drill down - как раз оттуда
"https://www.drupal.org/node/1315566
Apr 4, 2014 - I needed to drill down through a node to a field collection with a term .... Events: After node is updated."
На английском мне было бы гораздо проще писать.
// поверьте мне друпал выносит мозг не меньше, из-за отсутствия нормальной документации и примеров. Если написал что лишнее извините, просто забыл закоментить.
Я сделал програмно кнопку с помошью hook_node_view() и hook_field_extra_fields()
С помошью hook_node_view_alter() и drupal_add_js() загрузил явасткрипт чтоб он реагировал на нажатие кнопки и Вызывал ajax запрос my_module_menu_ajax_callback()на выполнение кучи кода, вызывающего и обрабатывающего поля из профилей и нод.
На кнопку нужно навесть лейбу в зависимости от значения одного из полей профиля юзера селекторов ноды.
Спасибо.
Там конечно есть структура полей, но значений нет. Нет и node id.
То есть то что мене надо, надо делать другим хуком. Но имеено там я ставлю условие подключать яваскрипт или нет. Приходиться все равно стучатся в базу.
Потреб. кооперация на Друпал
Единственная трудность возникла ограничить тех кому не надо в том чтобы ставить/менять глобальные флаги
если делать через родную функцию модуля access - то и блокируется флаг полностью (с отображением)
также настройка "Users may only flag content they own" - (что можно было использовать для участников) - блокирует отображение глобального флага для всех "не хозяев".
Пришлось добавить пару строк в flag.module в function template_preprocess_flag(&$variables)
Потреб. кооперация на Друпал
для взаимодействия "администратор-пользователи" - это вариант.
тут же пользователи взаимодействуют между собой и каждый "хозяин" только своей ноды.
т.е. у организатора (OG "массовая закупка") нет прав редактировать заказы участников закупки. Да и не нужны они ему, так как он не может принимать решения за них.
Потреб. кооперация на Друпал
думал об этом, но так как уже использовались OG - то уже приделал к ним
сделал вывод представления под "массовой закупкой" с выводом всех заказов и агрегацией суммы
через Global PHP внедрил перерасчет цены (от количества общего заказа) и сумму к оплате для каждого участника
Потреб. кооперация на Друпал
в одном из вариантов так оно и может быть соц сеть с элементами сотрудничества.
тут речь идет о специализированном сервисе для идейных людей, кооператоров, коммунаров. Для них это практически часть трудового процесса. Так что пока что важнее функционал.
Потреб. кооперация на Друпал
то есть с нуля ее сделать?
нода должна запоминить кто и что ввел в поле.
не могли бы ссылку дать на подобное, или модуль который работает аналогичным образом.
Потреб. кооперация на Друпал
Спасибо за идеи, попробую их развить.
Через Entity Ref. prepopulate via URL: как сделать по типу basic cart - добавление "заказа". Как-то не серьезно для того чтоб одну цифру ввести переходить на создание ноды? Через программное создание ноды с получением количества через Ajax?
Через field_collection - как другие пользователи смогут добавлять свои данные в чужую ноду? Можно дать права всем править поля в таком-то типе содержимого. Но как еще при этом запретить не менять чужие данные?
Открытые фильтры срабатывают только у админа.
а вот так сработало как ожидалось
<?php
global $user;
if (arg(0) == 'user' && is_numeric(arg(1)) && $user->uid <> arg(1)) { // change from $user->uid == arg(1))
return FALSE;
}
return TRUE; // block will be shown
?>
решено
Открытые фильтры срабатывают только у админа.
понял в чем дело
использую модуль views_php https://www.drupal.org/project/views_php
В Page settings/ Access options/ Access code
добавляю код для проверки - покзать передставленеие если пользователь просматривает свой профиль
global $user;
if (arg(0) == 'user' && is_numeric(arg(1)) && $user->uid == arg(1)) {
return TRUE; // tab will be shown
}
return FALSE;
Открытые фильтры срабатывают только у админа.
интересно что в когда выношу фильтры в блок - то все работает нормально,
прошелся по версиям jQuery - не помогло
Интерактивный выбор термина в ноде
разобрался в чем было дело.
друпаловаский ajax создает серию своих js файлов и если есть свои js файлы работающие с ajax - то получается такая каша.
решил перенести свой ajax запрос внутрь ajax обрабатывающего селект, - в xxxxxx_form_ajax_callback
Все будто бы получается. Но туда нужно также передать и uid просматриваемого профиля. Так как axaj постоянно использует адресную строку то получить из arg() или любой другой метод по адресу - не выходит.
создал в форме дополнительное поле
Интерактивный выбор термина в ноде
.
Видит ли ajax arg() ?
еще вариант как получить uid и nid в модулях где не работает arg()
$uid = substr(current_path(), 5);
$nid = substr(current_path(), 5);
Интерактивный выбор термина в ноде
Сменил хук вызывающий js с hook_user_view_alter(&$build) на hook_init() - не помогло.
Оставил старый селект (собраный вручную из html+js) и рядом подклячил HS на ajax.
Старый работает нормально - по выбору и клику по кнопке запускает нужный ajax запрос.
Но стоит тронуть HS и затем вызвать ajax по старому селекту - сразу идут 10 запросов.
[ Решено ] Собственные УРЛ адреса при переносе сайта на Drupal 7 без замены ? на %3F , и = на %3D.
Столкнулся с той же проблемой при создании ноды через Entity Reference Prepopulate from URL
Помогло http://www.php.su/functions/?urldecode
<?php$b = 'node/add/my_content?field_my_referencing_field='.$nodeid_current;
$b = l(t('Click me now'), $b);
print_r (urldecode($b)); ?>
Интерактивный выбор термина в ноде
Понял что проблема связана с HS виджетом.
Если он влючен, то при загрузке странцы файл яваскрипта ajax запроса запускается сразу несколько раз. И далее каждый раз при выборе термина запускаются еще запускается по несколько раз. Когда жму кнопку ajax запроса - то соответственно срабатывают весь десяток "висящих" яваскриптов и делается десяток ajax запрсов.
Я так понимаю что это ajax виджет постоянно перестраивает страницу и каждый раз вызывает hook_user_view_alter(&$build) через который я подгружаю яваскрипт.
Интерактивный выбор термина в ноде
Получилось.
Пока напишу в общем, так как есть одна ошибка.
Создал поле с помощью function hook_field_extra_fields()
Передал ему форму виджета HS select из http://xandeadx.ru/blog/drupal/446 с помошью hook_user_view()
из виджета а убрал кнопку Submit и ее callback
Куда лучше помещать php код?
Для тех кто случайно не дочитал вопросы:
"Надо тогда и чтоб модуль сам заполнял поля при подготовке ноды к показу.
Как тогда лучше оставить поля какие использовал, но их почистить от php кода. А модулями для каждого типа ноды программно заполнять поля?
Или же вообще их удалить и все даже создавать их программно?
Какими хуками это делается (вариант с модулями)?
hook_user_view_alter
hook_node_view_alter"
Куда лучше помещать php код?
Если кто-то из присутствующих никогда не говил "хук", а пользовался как положено - "великим и могучим" - пусть бросит в меня грязью.))
Ну, а если серьезно то русский язык так и развивается тем что впитывает иностранные слова выделяя им более конкретнее понятия, а общиее при этом остаются не такими загуженными.
А если копнете поглубже то вообще исконно словянских слов даже не половина. Даже "тарелка" у нас немецкая.
Подобная история и с Английским - весь культурный и деловой язык был добавлен норманами.
Видит ли ajax arg() ?
Использую функцию перевода t() в ajax_callback.
Похоже что ajax не видит язык интерфейса, язык в пути, но видит язык по умолчанию в профиле пользователя. Язык ноды видит тоже, но нужно ведь чтоб выдавал пререводы на том языке что пользователь выбрал в данный момент.
Мог бы его указать явно t('blabla', array(), array('langcode' => $langcode));
но откуда его взять $langcode? - если в $GLOBALS тоже нужного языка(ru) нигде нет, хотя в url стоит ru и выбран русский интерфейс.
Куда лучше помещать php код?
Drill down - как раз оттуда
"https://www.drupal.org/node/1315566
Apr 4, 2014 - I needed to drill down through a node to a field collection with a term .... Events: After node is updated."
На английском мне было бы гораздо проще писать.
// поверьте мне друпал выносит мозг не меньше, из-за отсутствия нормальной документации и примеров. Если написал что лишнее извините, просто забыл закоментить.
Куда лучше помещать php код?
Фокус в том что наш народ славившийся взамовыручкой, бескорыстием и дружилюбием значительно (и я в том числе) отстал в этом перед прогнившим западом.
Зайдите на http://drupal.stackexchange.com/, https://www.drupal.org, https://github.com/ и увидите по характеру ответов и количеству кода.
edit: Но как минимум одно преимуществ осталось, - прямота.
Куда лучше помещать php код?
По взамоодействию между хуков.
Я сделал програмно кнопку с помошью hook_node_view() и hook_field_extra_fields()
С помошью hook_node_view_alter() и drupal_add_js() загрузил явасткрипт чтоб он реагировал на нажатие кнопки и Вызывал ajax запрос my_module_menu_ajax_callback()на выполнение кучи кода, вызывающего и обрабатывающего поля из профилей и нод.
На кнопку нужно навесть лейбу в зависимости от значения одного из полей профиля юзера селекторов ноды.
Куда лучше помещать php код?
не, полностью код был такой
<?phpfunction my_module_node_view_alter(&$build) {
global $user;
//$nodeid_current = arg(1);
//$node = node_load($nodeid_current, null, true);
if ($user->uid <> $node->uid) {print_r("user_uid <> node->uid"); }
$build['#post_render'][] = 'my_module_node_post_render';
}?>
в dpm - #node показывает:
#node (Object) stdClass
∞ (Recursion)
$...['#node']->∞
Интерактивный выбор термина в ноде
Пока нашел заготовки для формы HS
http://www.anexusit.com/blog/how-add-hierarchical-select-field-fapi-drup...
http://drupal.stackexchange.com/questions/54812/how-to-set-form-type-as-...
Куда лучше помещать php код?
Спасибо.
Там конечно есть структура полей, но значений нет. Нет и node id.
То есть то что мене надо, надо делать другим хуком. Но имеено там я ставлю условие подключать яваскрипт или нет. Приходиться все равно стучатся в базу.