Адаптация существующих модулей и тем под CS-Cart 4.9.1¶
Общие изменения¶
- Добавлены типы профилей. Пока существует два типа: - U— профиль пользователя (администратора, покупателя, администратора продавца);
- S— профиль продавца.
 - На страницу управления полями профиля (Администрирование → Поля профиля) добавлен переключатель типа профиля. Боковая панель с переключателем появляется, если доступно более одного типа профилей. - Раздел Информация о продавце на странице управления полями профиля определяет, какие поля появятся в форме “Получить учётную запись продавца”. 
- Поддержка поля - faxбыла убрана из кода и шаблонов. В существующих установках поле- faxв таблице- cscart_companiesостанется неизменным, но в новых установках его не будет.
- Теперь нельзя изменить тип группы пользователей после того, как она была создана. Также нельзя назначаить группу пользователям не того типа. 
- Администратор продавца с назначенной ему группой теперь не считается администратором с ограниченными правами (restricted administrator). 
- Теперь в схеме blocks доступна новая директива - show_on_locations. Она позволяет указать места, куда можно добавить блок. Это ограничение работает, если вы пытаетесь добавить блок через интерфейс, а также не показывает блок, если он уже был добавлен.
- Добавлена новая настройка на вкладку Товары в модуль Отзывы и комментарии. Она разрешает оставлять отзывы о товаре только тем, кто его купил. 
- Немного изменилась логика размещения отзывов. Теперь пользователь должен войти в учётную запись, чтобы оставить отзыв. Если пользователь не вошёл в учётную запись, то при попытке оставить отзыв откроется форма авторизации. И форма авторизации, и новая форма для написания отзыва теперь подгружаются через AJAX. 
- Изменился интерфейс закрытия витрин(ы): - В CS-Cart витрину теперь можно закрыть на списке витрин или на странице редактирования витрины. Верхняя панель меню меняет цвет в зависимости от статуса витрины, которая сейчас выбрана. В режиме “Все магазины” будет появляться иконка замка, и она будет выглядеть по-разному в зависимости от того, сколько магазинов закрыто.
- В Multi-Vendor цвет верхней панели меню будет меняться в зависимости от того, открыта витрина или закрыта. Иконка замка будет вести на страницу Настройки → Общие, где витрину можно открыть.
 
- Добавлен модуль Тарифные планы для продавцов: Комиссии для категорий. Он позволяет задавать комиссии на заказы в зависимости от того, товары из каких категорий входят в эти заказы. 
- Добавлен новый data-атрибут - caScrollToElmOffset. Он позволяет задать отступ сверху при автоматической прокрутке страницы до определённого элемента. Это полезно, когда меню не исчезает при прокрутке вниз и наезжает на элемент, до которого автоматически прокручивается страница.- Атрибут нужно добавлять тегу <body> со значением в пикселях, например: - <body data-ca-scroll-to-elm-offset="120"> - Можно использовать и на витрине, и в панели администратора (теперь мы его там используем). 
Блокировки¶
Добавлен компонент для блокировок на основе symfony/lock; он позволяет гарантировать эксклюзивный доступ к общим ресурсам.
Чтобы создать блокировку, используйте Tygh::$app['lock.factory'].
Пример использования:
$lock = Tygh::$app['lock.factory']->createLock('pdf-invoice-generation');
if ($lock->acquire()) {
   // The resource "pdf-invoice-generation" is locked.
   // You can compute and generate invoice safely here.
   $lock->release();
}
В блок-менеджер, в компиляцию стилей и JS добавлена эксклюзивная блокировка, чтобы избежать состояния гонки.
Чтобы отключить блокировки, используйте провайдера dummy:
$config['lock_backend'] = 'dummy';
Устаревшие шаблоны¶
- design/backend/templates/views/orders/components/payments/business_check.tpl
- design/backend/templates/views/orders/components/payments/check.tpl
- design/backend/templates/views/orders/components/payments/fax.tpl
- design/themes/basic/templates/views/orders/components/payments/business_check.tpl
- design/themes/basic/templates/views/orders/components/payments/check.tpl
- design/themes/basic/templates/views/orders/components/payments/fax.tpl
- design/themes/responsive/templates/views/orders/components/payments/business_check.tpl
- design/themes/repsonsive/templates/views/orders/components/payments/check.tpl
- design/themes/responsive/templates/views/orders/components/payments/fax.tpl
Изменения в хуках¶
Новые хуки¶
- Этот хук позволяет изменять поля профиля после их получения: - fn_set_hook('get_profile_fields_post', $location, $_auth, $lang_code, $params, $profile_fields, $sections); 
- Этот хук позволяет изменять доступность группы для пользователя после того, как прошла основная проверка: - fn_set_hook('check_usergroup_available_for_user_post', $user_id, $usergroup_id, $result); 
- Этот хук позволяет изменять привилегии после их получения: - fn_set_hook('get_privileges_post', $usergroup, $privileges); 
- Этот хук позволяет менять доступность привилегий группы пользователей после основной проверки: - fn_set_hook('check_can_usergroup_have_privileges_post', $usergroup, $result); 
- Этот хук позволяет расширять доступные типы групп пользователей: - fn_set_hook('usergroup_types_get_list', $types); 
- Этот хук позволяет расширять соотнесение типов пользователей и типов групп пользователей: - fn_set_hook('usergroup_types_get_map_user_type', $map); 
- Этот хук выполняется сразу полсе того, как получены данные аутентификации пользователя из заголовков API-запроса. Хук позволяет изменять данные, которые идентифицируют пользователя, использующего API: - fn_set_hook('api_get_user_data', $this, $auth); 
- Этот хук позволяет пропустить очистку корзины при включении режима каталога: - fn_set_hook("catalog_mode_pre_add_to_cart", $product_data, $cart, $auth, $update, $can_delete); 
- Этот хук позволяет повлиять на процесс обновления цен товара: - fn_set_hook('update_product_prices', $product_id, $_product_data, $company_id, $skip_price_delete, $table_name, $condition); 
- Этот хук позволяет вам изменять данные пагинации: - fn_set_hook('generate_pagination_pre', $params, $area, $deviation); 
Изменённые хуки¶
- // Было: fn_set_hook('update_product_amount_pre', $product_id, $amount, $product_options, $sign, $tracking, $current_amount, $product_code); // Стало: fn_set_hook('update_product_amount_pre', $product_id, $amount, $product_options, $sign, $tracking, $current_amount, $product_code, $notify); 
- // Было: fn_set_hook('update_product_amount', $new_amount, $product_id, $cart_id, $tracking); // Стало: fn_set_hook('update_product_amount', $new_amount, $product_id, $cart_id, $tracking, $notify); 
- // Было: fn_set_hook('update_product_amount_post', $product_id, $amount, $product_options, $sign, $tracking, $current_amount, $new_amount, $product_code); // Стало: fn_set_hook('update_product_amount_post', $product_id, $amount, $product_options, $sign, $tracking, $current_amount, $new_amount, $product_code, $notify); 
Устаревшие хуки¶
fn_set_hook('profile_fields_areas', $areas); устарел; используйте вместо него схему profile_fields.
Изменения в функциях¶
Новые функции¶
- Выстраивает категории товаров в базе данных по порядку: - fn_sort_product_categories($product_id, array $category_ids) 
- Проверяет, можно ли назначить этому пользователю группу с таким ID: - fn_check_usergroup_available_for_user($user_id, $usergroup_id) 
- Получает привилегии группы пользователей: - fn_get_usergroup_privileges(array $usergroup) 
- Проверяет, могут ли у этой группы пользователей быть привилегии: - fn_check_can_usergroup_have_privileges(array $usergroup) 
- Получает все доступные группы пользователей по типу пользователя: - fn_get_available_usergroups($user_type) 
- Получает ключ доступа для определённой закрытой витрины: - fn_ult_get_storefront_access_key($company_id) 
- Получает статус определённой витрины: - fn_ult_get_storefront_status($company_id) 
- Открывает определённую витрину: - fn_ult_open_storefront($company_id) 
- Закрывает определённую витрину: - fn_ult_close_storefront($company_id) 
- Определяет, должна ли на этом шаге оформления заказа заново рассчитываться стоимость доставки: - fn_checkout_step_needs_shipping_calculation($cart, $completed_steps) 
- Определяет, были ли изменены данные пользователя в корзине: - fn_is_cart_user_data_changed(array &$cart, array $auth) 
- Получает тип предложения: - \Tygh\Ym\Offers::getOfferType($product) 
- Получает язык карты: - fn_rus_pickup_get_map_language($lang_code) 
- Управляет загрузкой файла пресета: - \Tygh\Addons\AdvancedImport\Readers\Factory::uploadPresetFile(array $preset, $company_id = null) 
Изменённые функции¶
- // Было: function fn_set_store_mode($store_mode, $company_id = null) // Стало: function fn_set_store_mode($store_mode, $company_id = null, $clear_cache = true) 
- // Было: function fn_update_product_amount($product_id, $amount, $product_options, $sign) // Стало: function fn_update_product_amount($product_id, $amount, $product_options, $sign, $notify = true) 
- \Tygh\Registry::loadFromCacheтеперь получает значение из кэша с определённым ключом.
- \Tygh\BlockManager\RenderManager::registerBlockCacheIfNeededтеперь возвращает массив с параметром кэширования в случае успеха.
- fn_get_usergroupsтеперь возвращает только зарегистрированные типы групп пользователей. Чтобы зарегистрировать тип группы пользователей, воспользуйтесь хуком- usergroup_types_get_list.
- fn_define_usergroupsтеперь задаёт только зарегистрированные типы групп пользователей. Чтобы зарегистрировать тип группы пользователей, воспользуйтесь хуком- usergroup_types_get_map_user_type.
Новые классы¶
Tygh\Enum\Addons\Pickup\MapLanguage — перечисление языков карты.
 
                         
        