Мне нужен хук, который друпал исполняет первым, а уже потом все остальные.
Пишу код, который пересоздаёт корзину уберкарты(товары) в зависимости от поддомена. Оно работает, но замена видна не сразу после перехода на поддомен, а после перезагрузки.
<?phpfunction cube3_process_html(&$variables) {
ubc_rebuild_cart_by_curr_region($variables);
};?>
<?php if ( gsp_user_role_check('test') ) {
$nn = 1 ;
/*
$cityNode =gsp_get_model_city( $pr );
$citySite = gsp_get_poddomen();
*/
//( 11 );
if (!isset($_SESSION)) {
session_start();
};
$_SESSION['poddomenNew'] = gsp_get_poddomen();
//print_r( $_SESSION['poddomenNew'] );
//echo ' ';
//print_r( $_SESSION['poddomenOld'] );
if ( $_SESSION['poddomenOld'] != $_SESSION['poddomenNew'] ) {
$itemsCart = uc_cart_get_contents();
if ( empty( $itemsCart ) == false ) foreach( $itemsCart as $itemCart ) {
//
//if ( $itemCart )
$newModel = $_SESSION['poddomenNew'].gsp_get_model_type_tov($itemCart);
$newNid = db_select('uc_products', 'n')
->fields('n', array('nid'))
->condition('n.model', $newModel )
->execute()
->fetchField();
print_r( $newModel );
uc_cart_remove_item( $itemCart->nid, $itemCart->cart_id, $itemCart->data );
uc_cart_add_item( $newNid, $itemCart->qty, $itemCart->data, $itemCart->cart_id, FALSE, FALSE );
uc_cart_get_contents( $itemCart->cart_id, 'rebuild');
//print_r( $itemCart );
/*
$item_entity = entity_create('uc_cart_item', array(
'cart_id' => $itemCart->cart_id,
'nid' => $itemCart->nid,
'qty' => $itemCart->qty,
'data' => $itemCart->data,
));
entity_save('uc_cart_item', $item_entity);
*/
}
};
$_SESSION['poddomenOld'] = gsp_get_poddomen();
};?>
Перестройка товаров работает сразу, что видно по print_r, но чисто визуально видно только потом. Рискну предположить, что проблема в том, что html хук всё-таки происходит раньше хука уберккарты, который тащит данные из бд. Подскажите, пожалуйста, какой из хуков друпала 7 является самым первейшим.
Комментарии
hook_boot()
hook_init()
и понеслась.
Вообще, по вашим вопросам, становится страшно от того как вы решаете проблему
hook_boot, hook_init
Но подумайте, скорее всего у вас неверный подход к задаче.
[UPD] да блин, опять серебро
Спасибо, ребят. И, поверьте, там просто сам сайт такая дичь, что иначе не решить - там каждый товар имеет 80 клонов под каждый регион, а надо чтоб в корзине при смене региона были именно вариации товара на этот регион. И бахнул бы я вообще свою корзину без уберкарты, но сроки нуль.
Ыыыы... интересно где они нашли контент-менеджера под такое.
Первородный хук скорее всего не в курсах про уберкарт.
Phantom63rus, да если бы контент-менеджера... программистов-бедолаг заставили. Gun_dose, ну все ведь хуки в опред порядке исполняются(не асинхронно ведь.. вродее...). Под первородным хуком я и имел в виду тот, который самый первый, чтоб в нём корзину уберкарты менять, а уже в других ихних хуках чтоб из бд обновлённые записи бд тащило.
Вам всё же идти нужно не снизу, а наоборот сверху.
Врапперить функции уберкарта, что-то подменить своими через implements_alter()
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...
- работает в т.ч. на cache страницах, много на нем еще не загружено надо инициализировать в коде.