Адаптация существующих модулей и тем под 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_edit
- import_presets:bulk_edit_items
- import_presets:bulk_edit_actions
- banners:bulk_edit
- banners:bulk_edit_items
- data_feeds:bulk_edit
- data_feeds:bulk_edit_items
- em_subscribers:bulk_edit
- em_subscribers:bulk_edit_items
- reward_points:bulk_edit
- reward_points:bulk_edit_items
- reward_points:bulk_edit_actions
- seo_redirects:bulk_edit
- seo_redirects:bulk_edit_items
- seo_rules:bulk_edit
- seo_rules:bulk_edit_items
- seo_rules:context_menu
- tags:bulk_edit
- tags:bulk_edit_items
- tags:bulk_edit_actions
- block_manager:bulk_edit
- block_manager:bulk_edit_items
- block_manager:bulk_edit_actions
- cart:bulk_edit
- cart:bulk_edit_items
- cart:bulk_edit_actions
- categories:bulk_edit
- categories:bulk_edit_items
- products:bulk_edit
- companies:bulk_edit_items
- countries:bulk_edit
- countries:bulk_edit_items
- datakeeper:bulk_edit
- datakeeper:bulk_edit_items
- datakeeper:bulk_edit_actions
- destinations:bulk_edit
- destinations:bulk_edit_items
- documents:bulk_edit
- documents:bulk_edit_items
- documents:bulk_edit_actions
- languages:bulk_edit
- languages:bulk_edit_items
- languages:bulk_edit_actions
- orders:bulk_edit
- orders:bulk_edit_items
- orders:view_tools_list_for_selected
- orders:export_tools_list_for_selected
- orders:list_tools_for_selected
- pages:bulk_edit
- pages:bulk_edit_items
- pages:bulk_edit_actions
- product_features:bulk_edit
- product_features:bulk_edit_items
- product_options:bulk_edit
- product_options:bulk_edit_items
- products:bulk_edit_items
- products:bulk_edit_actions
- profiles:bulk_edit
- profiles:bulk_edit_items
- profiles:view_tools_list_for_selected
- profiles:export_tools_list_for_selected
- profiles:list_tools_for_selected
- promotions:bulk_edit_items
- shipments:bulk_edit
- shipments:bulk_edit_items
- shipments:bulk_edit_actions
- shippings:bulk_edit
- shippings:bulk_edit_items
- states:bulk_edit_items
- taxes:bulk_edit
- taxes:bulk_edit_items
- taxes:bulk_edit_actions
- usergroups:bulk_edit
- usergroups:bulk_edit_items
Новые хуки в шаблонах¶
Добавлены новые хуки для контекстного меню (см. common/context_menu_wrapper.tpl)
- import_presets:context_menu
- banners:context_menu
- data_feeds:context_menu
- em_subscribers:context_menu
- reward_points:context_menu
- seo_redirects:context_menu
- tags:context_menu
- block_manager:context_menu
- cart:context_menu
- categories:context_menu
- companies:context_menu
- companies_invitations:context_menu
- countries:context_menu
- datakeeper:context_menu
- destinations:context_menu
- documents:context_menu
- languages:context_menu
- languages_translations:context_menu
- orders:context_menu
- p_subscriptions:context_menu
- pages:context_menu
- payments:context_menu
- payouts:context_menu
- product_features:context_menu
- product_features_groups:context_menu
- product_options:context_menu
- product_subscriptions:context_menu
- products:context_menu
- profile_fields:context_menu
- profiles:context_menu
- promotions:context_menu
- sales_reports_charts:context_menu
- shipments:context_menu
- shippings:context_menu
- snippets:context_menu
- states:context_menu
- static_data:context_menu
- storefronts:context_menu
- taxes:context_menu
- usergroups:context_menu
- access_restrictions:context_menu
- buy_together:context_menu
- call_requests:context_menu
- campaigns:context_menu
- common_import_presets:context_menu
- gift_certificates:context_menu
- hybrid_auth:context_menu
- mailing_lists:context_menu
- menus:context_menu
- newsletters:context_menu
- organizations:context_menu
- product_filters:context_menu
- product_reviews:context_menu
- product_variations:context_menu
- rma_properties:context_menu
- rma_returns:context_menu
- seo_rules:context_menu
- store_locator:context_menu
- subscribers:context_menu
- suppliers:context_menu
- vendor_communication_threads:context_menu
- vendor_plans:context_menu
- yml_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). 
 
                         
        