These are chat archives for dru-io/Drupal

4th
Jul 2016
boolboost
@boolboost
Jul 04 2016 10:38
Ку
Есть hook entity insert
В нём создаю сущность дополнительную и связываю через entity reference
На основе этих данных получаю ссылку для редиректа
Прямо в hook entity insert вызывать drupal goto нельзя
Где лучше её вызвать
Естественно после hook entity insert
Обычно юзаю hook init
Но это рано, данных нет
Alan Bondarchuk
@fortis
Jul 04 2016 11:28
можно в сессию записать и при следующем page load почистить из сесии и редиректнуть
hook_init вызывается в любом аяксе, лучше будет с hook_page_alter наверно
boolboost
@boolboost
Jul 04 2016 11:31
А хук init вызывает до или после ajax
Alan Bondarchuk
@fortis
Jul 04 2016 11:31
в нем)
boolboost
@boolboost
Jul 04 2016 11:31
Сохранится ли страница
Ну я про то что вдруг entity не сохранится=\
Alan Bondarchuk
@fortis
Jul 04 2016 11:32
сущность? да
ты не в хуке редиректишь
да и entity insert уже после того как сохранилась
boolboost
@boolboost
Jul 04 2016 11:32
Почему
В хуке
Alan Bondarchuk
@fortis
Jul 04 2016 11:32
но в нем редиректить нельзя ты так обрубишь все другие хуки
boolboost
@boolboost
Jul 04 2016 11:32
Но не в hook entity insert
А в других
Alan Bondarchuk
@fortis
Jul 04 2016 11:32
я написал где)
boolboost
@boolboost
Jul 04 2016 11:32
Да знаю
Просто вот в чём вопрос
Я наживаю кнопку
Дальге так и так идёт submit и save
В сессию сохраню
Толк какой?
Если редирект есть
Будет допустим
А если ajax форма?
Alan Bondarchuk
@fortis
Jul 04 2016 11:34
я не понимаю сформулируй нормально)
boolboost
@boolboost
Jul 04 2016 11:35
Как form ajax получит данные из сессии
Alan Bondarchuk
@fortis
Jul 04 2016 11:35
$data = $_SESSION['mymodule']['data']
boolboost
@boolboost
Jul 04 2016 11:36
Нее
Это понятно
У меня в гове не укладывается вот что
Нажали кнопку на форме
Она с ajax
Alan Bondarchuk
@fortis
Jul 04 2016 11:37
если с аякс тогда редирект на уровне js
возвращаешь аякс команду свою которая делает редирект
или ctools_ajax_command_redirect
boolboost
@boolboost
Jul 04 2016 11:38
Ну ок там допустим из form status
А если в обычной
Alan Bondarchuk
@fortis
Jul 04 2016 11:38
если уже в сабмите формы известно куда редиректить то можно использовать $form_state['redirect']
boolboost
@boolboost
Jul 04 2016 11:38
Да пробывал
И данные есть
Не пашит почему то
Alan Bondarchuk
@fortis
Jul 04 2016 11:39
может не работать если destination задан
boolboost
@boolboost
Jul 04 2016 11:39
Щас проверю
Вроде навёл на нужные мысли
Alan Bondarchuk
@fortis
Jul 04 2016 11:40
можно предварительно в сабмите ансет $_GET['destination'] сделать
а лучше там откуда он переходит на форму его убрать из урл
boolboost
@boolboost
Jul 04 2016 11:43
С ajax легко решилось$commands[] = ctools_ajax_command_redirect($form_state['redirect']);
redirect в submit сделал
А вот без ajax не пашит
$form_state['no_redirect'] = FALSE;
Пришлось добавить
destination тоже убрать
@fortis спасибо. За основы. Друпал очень за не детальное знание ядра обьёт.
KarmaBot
@KarmaBot
Jul 04 2016 11:47
Спасибо (+1) для @fortis принято! Текущая карма +26.
Alan Bondarchuk
@fortis
Jul 04 2016 11:51
ставь отладчик, поневоле будешь в ядре копаться)
phpstorm кстати планируют кроме xdebug сделать поддержку http://phpdbg.com/
но они рожают что-то полезное годами)))
boolboost
@boolboost
Jul 04 2016 11:54
Дорого все эти xdebug
Сегодня уже копался без него
Нужно было в entity insert дополнительное поле обновить
Плохо доку читал
Там при попытке сохранить ругает что id уже есть))
Но пока понял что пает и почему
Пришлось несколько dpm в ядре поставить
В этом плане конечно с xdebug по лучше
Но я как то боюсь его использовать
Говорят тяжолый
Alan Bondarchuk
@fortis
Jul 04 2016 11:59
ну на продакшене его и не ставят
а локально какие проблемы, это быстрее чем dpm
и эффективнее
boolboost
@boolboost
Jul 04 2016 12:00
У меня сервер для разработки
Так что слабенький для xdebug

function submit_redirect($form, &$form_state) {
$crm_redirect = &drupal_static('crm_redirect', '');

if ($crm_redirect) {
if (empty($form_state['ajax'])) {
$form_state['no_redirect'] = FALSE;
}
$form_state['redirect'] = url($crm_redirect);
}
}

Alan Bondarchuk
@fortis
Jul 04 2016 12:01
ну если только там и друпал еле тянет
boolboost
@boolboost
Jul 04 2016 12:01
Такой калбек для submit
И никаких сессий
Alan Bondarchuk
@fortis
Jul 04 2016 12:01
а статика зачем?
boolboost
@boolboost
Jul 04 2016 12:01
Да нет
Drupal вроде норм
Но чутка по быстрее было бы гуд
Alan Bondarchuk
@fortis
Jul 04 2016 12:02
хдебаг выключается кнопкой в браузере, когда надо включаешь
boolboost
@boolboost
Jul 04 2016 12:02
В общем nodejs gulp и drupal работает в месте нормально
Нужно будет попробовать
$wrapper = entity_metadata_wrapper($type, $entity);
$wrapper->field_ref_works[] = entity_extract_ids('work', $entity_work)[0];
$entity->is_new = FALSE;
$wrapper->save();
$entity->is_new = TRUE;
Такое пришлось писать
boolboost
@boolboost
Jul 04 2016 12:04
А так не допрёшь
Что в hook entity insert так
Alan Bondarchuk
@fortis
Jul 04 2016 12:05
если entity api стоит то достаточно $entity_work->identifier()
или entity_id()
boolboost
@boolboost
Jul 04 2016 12:05
Ну нет
У меня на практики были случаи
Причём на этом же проекте
Когда identifier выдаёт число
А по факту это не id
При этом в структуре данные есть
В случаи когда entity reference с заполненым id помоему
А сущности такой нет уже
Alan Bondarchuk
@fortis
Jul 04 2016 12:07
а да это если у тебя в entity keys есть name
boolboost
@boolboost
Jul 04 2016 12:08
В общем мне так пока надёжнее
Хотя может я лишнее делать
Делаю
С опытом придёт наверное
Я дальше пахать
boolboost
@boolboost
Jul 04 2016 12:28
Что то мне подсказывает что можно просто destination завести и он в ajax form подтянется тоже
Alan Bondarchuk
@fortis
Jul 04 2016 19:10
вряд ли аякс от этого сделает редирект