Kottov: Комментарии

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

25 сентября 2014 в 16:31

Единственная трудность возникла ограничить тех кому не надо в том чтобы ставить/менять глобальные флаги
если делать через родную функцию модуля access - то и блокируется флаг полностью (с отображением)
также настройка "Users may only flag content they own" - (что можно было использовать для участников) - блокирует отображение глобального флага для всех "не хозяев".

Пришлось добавить пару строк в flag.module в function template_preprocess_flag(&$variables)

25 сентября 2014 в 16:10

для взаимодействия "администратор-пользователи" - это вариант.
тут же пользователи взаимодействуют между собой и каждый "хозяин" только своей ноды.
т.е. у организатора (OG "массовая закупка") нет прав редактировать заказы участников закупки. Да и не нужны они ему, так как он не может принимать решения за них.

23 сентября 2014 в 22:08

"orion76" wrote:
А если для заказа комментарии к закупке использовать?...

думал об этом, но так как уже использовались OG - то уже приделал к ним
сделал вывод представления под "массовой закупкой" с выводом всех заказов и агрегацией суммы
через Global PHP внедрил перерасчет цены (от количества общего заказа) и сумму к оплате для каждого участника

20 сентября 2014 в 4:13

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

тут речь идет о специализированном сервисе для идейных людей, кооператоров, коммунаров. Для них это практически часть трудового процесса. Так что пока что важнее функционал.

19 сентября 2014 в 4:38

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

19 сентября 2014 в 4:15

Спасибо за идеи, попробую их развить.

Через Entity Ref. prepopulate via URL: как сделать по типу basic cart - добавление "заказа". Как-то не серьезно для того чтоб одну цифру ввести переходить на создание ноды? Через программное создание ноды с получением количества через Ajax?

Через field_collection - как другие пользователи смогут добавлять свои данные в чужую ноду? Можно дать права всем править поля в таком-то типе содержимого. Но как еще при этом запретить не менять чужие данные?

30 августа 2014 в 18:28

а вот так сработало как ожидалось

<?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
?>

решено

30 августа 2014 в 17:58

понял в чем дело
использую модуль 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;

18 августа 2014 в 22:14

разобрался в чем было дело.
друпаловаский ajax создает серию своих js файлов и если есть свои js файлы работающие с ajax - то получается такая каша.

решил перенести свой ajax запрос внутрь ajax обрабатывающего селект, - в xxxxxx_form_ajax_callback
Все будто бы получается. Но туда нужно также передать и uid просматриваемого профиля. Так как axaj постоянно использует адресную строку то получить из arg() или любой другой метод по адресу - не выходит.

создал в форме дополнительное поле

14 августа 2014 в 5:22

Сменил хук вызывающий js с hook_user_view_alter(&$build) на hook_init() - не помогло.
Оставил старый селект (собраный вручную из html+js) и рядом подклячил HS на ajax.
Старый работает нормально - по выбору и клику по кнопке запускает нужный ajax запрос.
Но стоит тронуть HS и затем вызвать ajax по старому селекту - сразу идут 10 запросов.

11 августа 2014 в 13:27

Столкнулся с той же проблемой при создании ноды через 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));  ?>

31 июля 2014 в 14:20

Понял что проблема связана с HS виджетом.
Если он влючен, то при загрузке странцы файл яваскрипта ajax запроса запускается сразу несколько раз. И далее каждый раз при выборе термина запускаются еще запускается по несколько раз. Когда жму кнопку ajax запроса - то соответственно срабатывают весь десяток "висящих" яваскриптов и делается десяток ajax запрсов.

Я так понимаю что это ajax виджет постоянно перестраивает страницу и каждый раз вызывает hook_user_view_alter(&$build) через который я подгружаю яваскрипт.

31 июля 2014 в 13:10

Получилось.
Пока напишу в общем, так как есть одна ошибка.

Создал поле с помощью function hook_field_extra_fields()
Передал ему форму виджета HS select из http://xandeadx.ru/blog/drupal/446 с помошью hook_user_view()
из виджета а убрал кнопку Submit и ее callback

30 июля 2014 в 23:09

Для тех кто случайно не дочитал вопросы:

"Надо тогда и чтоб модуль сам заполнял поля при подготовке ноды к показу.
Как тогда лучше оставить поля какие использовал, но их почистить от php кода. А модулями для каждого типа ноды программно заполнять поля?
Или же вообще их удалить и все даже создавать их программно?

Какими хуками это делается (вариант с модулями)?
hook_user_view_alter
hook_node_view_alter"

30 июля 2014 в 23:07

Если кто-то из присутствующих никогда не говил "хук", а пользовался как положено - "великим и могучим" - пусть бросит в меня грязью.))

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

А если копнете поглубже то вообще исконно словянских слов даже не половина. Даже "тарелка" у нас немецкая.

Подобная история и с Английским - весь культурный и деловой язык был добавлен норманами.

26 июля 2014 в 4:09

Использую функцию перевода t() в ajax_callback.

Похоже что ajax не видит язык интерфейса, язык в пути, но видит язык по умолчанию в профиле пользователя. Язык ноды видит тоже, но нужно ведь чтоб выдавал пререводы на том языке что пользователь выбрал в данный момент.

Мог бы его указать явно t('blabla', array(), array('langcode' => $langcode));
но откуда его взять $langcode? - если в $GLOBALS тоже нужного языка(ru) нигде нет, хотя в url стоит ru и выбран русский интерфейс.

23 июля 2014 в 17:22

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."
На английском мне было бы гораздо проще писать.
// поверьте мне друпал выносит мозг не меньше, из-за отсутствия нормальной документации и примеров. Если написал что лишнее извините, просто забыл закоментить.

23 июля 2014 в 12:05

Фокус в том что наш народ славившийся взамовыручкой, бескорыстием и дружилюбием значительно (и я в том числе) отстал в этом перед прогнившим западом.
Зайдите на http://drupal.stackexchange.com/, https://www.drupal.org, https://github.com/ и увидите по характеру ответов и количеству кода.

edit: Но как минимум одно преимуществ осталось, - прямота.

23 июля 2014 в 6:32

По взамоодействию между хуков.

Я сделал програмно кнопку с помошью hook_node_view() и hook_field_extra_fields()
С помошью hook_node_view_alter() и drupal_add_js() загрузил явасткрипт чтоб он реагировал на нажатие кнопки и Вызывал ajax запрос my_module_menu_ajax_callback()на выполнение кучи кода, вызывающего и обрабатывающего поля из профилей и нод.

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

23 июля 2014 в 6:05

не, полностью код был такой

<?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']->∞

23 июля 2014 в 2:00

Спасибо.
Там конечно есть структура полей, но значений нет. Нет и node id.
То есть то что мене надо, надо делать другим хуком. Но имеено там я ставлю условие подключать яваскрипт или нет. Приходиться все равно стучатся в базу.