Адаптация существующих модулей и тем под CS-Cart 4.13.1¶
Общие изменения¶
Изменения в контекстном меню¶
Добавлен единый механизм создания контекстного меню, основанный на схемах. Примеры реализации: app/schemas/context_menu/profiles.php
Схема контекстного меню имеет следующую структуру:
[
'selectable_statuses' => array<string, string> // Список статусов для выделения элементов.
'items' => [ // Список элементов контекстного меню.
'status' => [ // Идентификатор элемента.
'name' => ['template' => 'status'], // Название элемента.
'type' => GroupItem::class, // Тип элемента (ActionItem/GroupItem/ComponentItem).
'data' => [ // Данные для передачи в шаблон. В шаблоне обращаться через $data.
'menu_item_class' => 'cm-no-hide-input', // menu_item_attributes, menu_item_class, action_attributes, action_class - используется в общих шаблонах.
...
],
'items' => [ // Список вложенных элементов в GroupItem.
'm_activate' => [ // Элемент-ссылка.
'name' => [
'template' => 'change_to_status',
'params' => [
'[status]' => __('active'),
...
],
],
'dispatch' => 'profiles.m_activate', // Диспатч, на который будут переданы идентификаторы выделенных элементов; диспатч также используется при проверке доступности элемента текущему пользователю.
'position' => 10, // Позиция элемента в списке.
],
'actions_divider' => [ // Элемент-разделитель.
'type' => DividerItem::class, // Тип вложенного в GroupItem элемента (GroupActionItem/ComponentItem/DividerItem). По умолчанию тип элемента GroupActionItem.
'position' => 20,
],
'notify_checkboxes' => [ // Элемент с собственным шаблоном.
'type' => ComponentItem::class,
'template' => 'views/profiles/components/context_menu/notify_checkboxes.tpl', // Собственный шаблон элемента ComponentItem.
'data_provider' => static function () { // Callback-функция для формирования данных для передачи в шаблон. В шаблоне обращаться через $data.
return [
'param1' => 'value2',
...
];
},
'position' => 30,
],
...
],
'permission_callback' => static function ($request, $auth, $runtime) { // Callback-функция для проверки доступности элемента.
return !(
UserTypes::isVendor($auth['user_type'])
&& UserTypes::isCustomer($request['user_type'])
&& fn_check_permissions('profiles', 'm_activate', 'admin', 'POST', ['user_type' => $request['user_type']])
&& fn_check_permissions('profiles', 'm_disable', 'admin', 'POST', ['user_type' => $request['user_type']])
);
},
'position' => 20,
],
...
],
]
Изменения в ядре¶
Изменённые классы¶
// Было: \XMLDocument // Стало: \XMLDocument\XMLDocument
// Было: \XMLParser // Стало: \XMLDocument\XMLParser
Новые функции¶
Выполняет действие в рамках компании с указанным идентификатором:
fn_execute_as_company(callable $action, $company_id)
Получает экземпляр диспетчера событий:
\Tygh\Providers\EventDispatcherProvider::getEventDispatcher()
Получает экземпляр фабрики классов для настроек уведомлений:
\Tygh\Providers\EventDispatcherProvider::getNotificationSettingsFactory()
Получает встроенный лицензионный номер модуля, загруженного из Маркетплейса:
\Tygh\Addons\XmlScheme3::getMarketplaceLicenseNumber()
Изменения в шаблонах¶
Удалённые хуки в шаблонах¶
import_presets:bulk_editimport_presets:bulk_edit_itemsimport_presets:bulk_edit_actionsbanners:bulk_editbanners:bulk_edit_itemsdata_feeds:bulk_editdata_feeds:bulk_edit_itemsem_subscribers:bulk_editem_subscribers:bulk_edit_itemsreward_points:bulk_editreward_points:bulk_edit_itemsreward_points:bulk_edit_actionsseo_redirects:bulk_editseo_redirects:bulk_edit_itemsseo_rules:bulk_editseo_rules:bulk_edit_itemsseo_rules:context_menutags:bulk_edittags:bulk_edit_itemstags:bulk_edit_actionsblock_manager:bulk_editblock_manager:bulk_edit_itemsblock_manager:bulk_edit_actionscart:bulk_editcart:bulk_edit_itemscart:bulk_edit_actionscategories:bulk_editcategories:bulk_edit_itemsproducts:bulk_editcompanies:bulk_edit_itemscountries:bulk_editcountries:bulk_edit_itemsdatakeeper:bulk_editdatakeeper:bulk_edit_itemsdatakeeper:bulk_edit_actionsdestinations:bulk_editdestinations:bulk_edit_itemsdocuments:bulk_editdocuments:bulk_edit_itemsdocuments:bulk_edit_actionslanguages:bulk_editlanguages:bulk_edit_itemslanguages:bulk_edit_actionsorders:bulk_editorders:bulk_edit_itemsorders:view_tools_list_for_selectedorders:export_tools_list_for_selectedorders:list_tools_for_selectedpages:bulk_editpages:bulk_edit_itemspages:bulk_edit_actionsproduct_features:bulk_editproduct_features:bulk_edit_itemsproduct_options:bulk_editproduct_options:bulk_edit_itemsproducts:bulk_edit_itemsproducts:bulk_edit_actionsprofiles:bulk_editprofiles:bulk_edit_itemsprofiles:view_tools_list_for_selectedprofiles:export_tools_list_for_selectedprofiles:list_tools_for_selectedpromotions:bulk_edit_itemsshipments:bulk_editshipments:bulk_edit_itemsshipments:bulk_edit_actionsshippings:bulk_editshippings:bulk_edit_itemsstates:bulk_edit_itemstaxes:bulk_edittaxes:bulk_edit_itemstaxes:bulk_edit_actionsusergroups:bulk_editusergroups:bulk_edit_items
Новые хуки в шаблонах¶
Добавлены новые хуки для контекстного меню (см. common/context_menu_wrapper.tpl)
import_presets:context_menubanners:context_menudata_feeds:context_menuem_subscribers:context_menureward_points:context_menuseo_redirects:context_menutags:context_menublock_manager:context_menucart:context_menucategories:context_menucompanies:context_menucompanies_invitations:context_menucountries:context_menudatakeeper:context_menudestinations:context_menudocuments:context_menulanguages:context_menulanguages_translations:context_menuorders:context_menup_subscriptions:context_menupages:context_menupayments:context_menupayouts:context_menuproduct_features:context_menuproduct_features_groups:context_menuproduct_options:context_menuproduct_subscriptions:context_menuproducts:context_menuprofile_fields:context_menuprofiles:context_menupromotions:context_menusales_reports_charts:context_menushipments:context_menushippings:context_menusnippets:context_menustates:context_menustatic_data:context_menustorefronts:context_menutaxes:context_menuusergroups:context_menuaccess_restrictions:context_menubuy_together:context_menucall_requests:context_menucampaigns:context_menucommon_import_presets:context_menugift_certificates:context_menuhybrid_auth:context_menumailing_lists:context_menumenus:context_menunewsletters:context_menuorganizations:context_menuproduct_filters:context_menuproduct_reviews:context_menuproduct_variations:context_menurma_properties:context_menurma_returns:context_menuseo_rules:context_menustore_locator:context_menusubscribers:context_menusuppliers:context_menuvendor_communication_threads:context_menuvendor_plans:context_menuyml_export_price_lists:context_menu
Изменения в хуках¶
Измененные хуки¶
// Было: fn_set_hook('promotion_apply_before_get_promotions', $zone, $data, $auth, $cart_products, $promotions, $applied_promotions); // Стало: fn_set_hook('promotion_apply_before_get_promotions', $zone, $data, $auth, $cart_products, $promotions, $applied_promotions, $get_promotions_params);
// Было: fn_set_hook('get_profile_fields', $location, $select, $condition); // Стало: fn_set_hook('get_profile_fields', $location, $select, $condition, $params);
// Было: fn_set_hook('place_suborders', $cart, $suborder_cart); // Стало: fn_set_hook('place_suborders', $cart, $suborder_cart, $key_group);
// Было: fn_set_hook('update_product_features_value_pre', $product_id, $product_features, $add_new_variant, $lang_code, $params, $category_ids); // Стало: fn_set_hook('update_product_features_value_pre', $product_id, $product_features, $add_new_variant, $lang_code, $params, $product_category_ids, $product_categories_paths);
// Было: fn_set_hook('update_product_features_value_post', $product_id, $product_features, $add_new_variant, $lang_code, $params, $category_ids); // Стало: fn_set_hook('update_product_features_value_post', $product_id, $product_features, $add_new_variant, $lang_code, $params, $product_categories_ids);
Новые хуки¶
Выполняется перед созданием отзыва. Позволяет изменять аргументы, переданные методу:
fn_set_hook('product_reviews_create_pre', $product_review_data);
Выполняется после проверки на то, имеет ли пользователь право оставить отзыв. Позволяет изменять аргументы, переданные методу:
fn_set_hook('product_reviews_is_user_eligible_to_write_product_review', $user_id, $product_id, $ip, $need_to_buy_first, $review_ip_check, $result);
Выполняется перед получением упрощенного списка групп пользователей из базы данных. Позволяет изменять параметры запроса:
fn_set_hook('get_simple_usergroups', $type, $get_default, $lang_code, $where);
Выполняется перед получением информации о промо-акциии. Позволяет изменять параметры, переданные методу:
fn_set_hook('get_promotion_data_pre', $promotion_id, $lang_code, $extra_condition);
Позволяет заменить значения экспортированных полей “Доступность товаров”:
fn_set_hook('export_product_availability', $availability, $export_type);
Выполняется после получения данных пользователя для создания заказа через API-запрос. Позволяет изменять данные пользователя корзины:
fn_set_hook('api_orders_create_after_get_user_data', $params, $status, $data, $valid_params, $auth, $cart);
Выполняется после того, как идентификатор компании заменен на новый. Позволяет производить дополнительные действия над глобальным состоянием магазина на момент обработки запроса:
fn_set_hook('execute_as_company_after_set_company_id', $action, $company_id);
Выполняется после того, как идентификатор компании был восстановлен. Позволяет производить дополнительные действия над глобальным состоянием магазина на момент обработки запроса:
fn_set_hook('execute_as_company_after_restore_company_id', $action, $company_id);
Выполняется после получения информации из базы данных. Позволяет изменять данные:
fn_set_hook('shippings_get_shipping_for_test_post', $shipping_id, $service_id, $service_params, $package_info, $lang, $shipping_info);
Выполняется после того, как был сформирован список сопоставлений расширений и типов файлов:
fn_set_hook('get_ext_mime_types', $key, $types);
Выполняется после получения статуса доступа к странице оформления заказа. Позволяет редактировать эту страницу:
fn_set_hook('get_access_to_checkout', $cart, $payment_methods, $access);
Выполняется после определения статуса заказа, доставленного маркетплейсом. Позволяет менять тип статуса заказа:
fn_set_hook('are_company_orders_fulfilled_by_marketplace', $company_id, $fulfillment_status);
Выполняется по завершении выбора курьера. Позволяет сменить курьера:
fn_set_hook('is_shipping_sent_by_marketplace', $shipping, $result).