Адаптация существующих модулей и тем под CS-Cart 4.9.1

Общие изменения

  1. Добавлены типы профилей. Пока существует два типа:

    • U — профиль пользователя (администратора, покупателя, администратора продавца);
    • S — профиль продавца.

    На страницу управления полями профиля (Администрирование → Поля профиля) добавлен переключатель типа профиля. Боковая панель с переключателем появляется, если доступно более одного типа профилей.

    Раздел Информация о продавце на странице управления полями профиля определяет, какие поля появятся в форме “Получить учётную запись продавца”.

  2. Поддержка поля fax была убрана из кода и шаблонов. В существующих установках поле fax в таблице cscart_companies останется неизменным, но в новых установках его не будет.

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

  4. Администратор продавца с назначенной ему группой теперь не считается администратором с ограниченными правами (restricted administrator).

  5. Теперь в схеме blocks доступна новая директива show_on_locations. Она позволяет указать места, куда можно добавить блок. Это ограничение работает, если вы пытаетесь добавить блок через интерфейс, а также не показывает блок, если он уже был добавлен.

  6. Добавлена новая настройка на вкладку Товары в модуль Отзывы и комментарии. Она разрешает оставлять отзывы о товаре только тем, кто его купил.

  7. Немного изменилась логика размещения отзывов. Теперь пользователь должен войти в учётную запись, чтобы оставить отзыв. Если пользователь не вошёл в учётную запись, то при попытке оставить отзыв откроется форма авторизации. И форма авторизации, и новая форма для написания отзыва теперь подгружаются через AJAX.

  8. Изменился интерфейс закрытия витрин(ы):

    • В CS-Cart витрину теперь можно закрыть на списке витрин или на странице редактирования витрины. Верхняя панель меню меняет цвет в зависимости от статуса витрины, которая сейчас выбрана. В режиме “Все магазины” будет появляться иконка замка, и она будет выглядеть по-разному в зависимости от того, сколько магазинов закрыто.
    • В Multi-Vendor цвет верхней панели меню будет меняться в зависимости от того, открыта витрина или закрыта. Иконка замка будет вести на страницу Настройки → Общие, где витрину можно открыть.
  9. Добавлен модуль Тарифные планы для продавцов: Комиссии для категорий. Он позволяет задавать комиссии на заказы в зависимости от того, товары из каких категорий входят в эти заказы.

  10. Добавлен новый 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

Изменения в хуках

Новые хуки

  1. Этот хук позволяет изменять поля профиля после их получения:

    fn_set_hook('get_profile_fields_post', $location, $_auth, $lang_code, $params, $profile_fields, $sections);
    
  2. Этот хук позволяет изменять доступность группы для пользователя после того, как прошла основная проверка:

    fn_set_hook('check_usergroup_available_for_user_post', $user_id, $usergroup_id, $result);
    
  3. Этот хук позволяет изменять привилегии после их получения:

    fn_set_hook('get_privileges_post', $usergroup, $privileges);
    
  4. Этот хук позволяет менять доступность привилегий группы пользователей после основной проверки:

    fn_set_hook('check_can_usergroup_have_privileges_post', $usergroup, $result);
    
  5. Этот хук позволяет расширять доступные типы групп пользователей:

    fn_set_hook('usergroup_types_get_list', $types);
    
  6. Этот хук позволяет расширять соотнесение типов пользователей и типов групп пользователей:

    fn_set_hook('usergroup_types_get_map_user_type', $map);
    
  7. Этот хук выполняется сразу полсе того, как получены данные аутентификации пользователя из заголовков API-запроса. Хук позволяет изменять данные, которые идентифицируют пользователя, использующего API:

    fn_set_hook('api_get_user_data', $this, $auth);
    
  8. Этот хук позволяет пропустить очистку корзины при включении режима каталога:

    fn_set_hook("catalog_mode_pre_add_to_cart", $product_data, $cart, $auth, $update, $can_delete);
    
  9. Этот хук позволяет повлиять на процесс обновления цен товара:

    fn_set_hook('update_product_prices', $product_id, $_product_data, $company_id, $skip_price_delete, $table_name, $condition);
    
  10. Этот хук позволяет вам изменять данные пагинации:

    fn_set_hook('generate_pagination_pre', $params, $area, $deviation);
    

Изменённые хуки

  1. // Было:
    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);
    
  2. // Было:
    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);
    
  3. // Было:
    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.

Изменения в функциях

Новые функции

  1. Выстраивает категории товаров в базе данных по порядку:

    fn_sort_product_categories($product_id, array $category_ids)
    
  2. Проверяет, можно ли назначить этому пользователю группу с таким ID:

    fn_check_usergroup_available_for_user($user_id, $usergroup_id)
    
  3. Получает привилегии группы пользователей:

    fn_get_usergroup_privileges(array $usergroup)
    
  4. Проверяет, могут ли у этой группы пользователей быть привилегии:

    fn_check_can_usergroup_have_privileges(array $usergroup)
    
  5. Получает все доступные группы пользователей по типу пользователя:

    fn_get_available_usergroups($user_type)
    
  6. Получает ключ доступа для определённой закрытой витрины:

    fn_ult_get_storefront_access_key($company_id)
    
  7. Получает статус определённой витрины:

    fn_ult_get_storefront_status($company_id)
    
  8. Открывает определённую витрину:

    fn_ult_open_storefront($company_id)
    
  9. Закрывает определённую витрину:

    fn_ult_close_storefront($company_id)
    
  10. Определяет, должна ли на этом шаге оформления заказа заново рассчитываться стоимость доставки:

    fn_checkout_step_needs_shipping_calculation($cart, $completed_steps)
    
  11. Определяет, были ли изменены данные пользователя в корзине:

    fn_is_cart_user_data_changed(array &$cart, array $auth)
    
  12. Получает тип предложения:

    \Tygh\Ym\Offers::getOfferType($product)
    
  13. Получает язык карты:

    fn_rus_pickup_get_map_language($lang_code)
    
  14. Управляет загрузкой файла пресета:

    \Tygh\Addons\AdvancedImport\Readers\Factory::uploadPresetFile(array $preset, $company_id = null)
    

Изменённые функции

  1. // Было:
    function fn_set_store_mode($store_mode, $company_id = null)
    
    // Стало:
    function fn_set_store_mode($store_mode, $company_id = null, $clear_cache = true)
    
  2. // Было:
    function fn_update_product_amount($product_id, $amount, $product_options, $sign)
    
    // Стало:
    function fn_update_product_amount($product_id, $amount, $product_options, $sign, $notify = true)
    
  3. \Tygh\Registry::loadFromCache теперь получает значение из кэша с определённым ключом.

  4. \Tygh\BlockManager\RenderManager::registerBlockCacheIfNeeded теперь возвращает массив с параметром кэширования в случае успеха.

  5. fn_get_usergroups теперь возвращает только зарегистрированные типы групп пользователей. Чтобы зарегистрировать тип группы пользователей, воспользуйтесь хуком usergroup_types_get_list.

  6. fn_define_usergroups теперь задаёт только зарегистрированные типы групп пользователей. Чтобы зарегистрировать тип группы пользователей, воспользуйтесь хуком usergroup_types_get_map_user_type.

Новые классы

Tygh\Enum\Addons\Pickup\MapLanguage — перечисление языков карты.