Добавить использование hash в ссылке для коллекции (UI 2)
В shopProdList.action.php видим такое:
$collection = new shopProductsCollection('', $sorting_options); То есть хеш из ссылки не читается от слова совсем
Однако смотрим class shopProductsCollection и видим там такое:
/**
* Creates a new product collection.
*
* @param string|array $hash Product selection conditions. Examples:
* array(12,23,34) or 'id/12,23,34' — explicitly specified product ids
* 'related/cross_selling/12' — cross-selling items for product with id = 12
* 'related/upselling/23' — upselling items for product with id = 23
* 'category/208' — search by category id
* 'search/query=style' — search results by query 'style'
* 'search/tag=style' — search results by tag 'style'
* 'tag/style' — alternative form of search by tag
* 'search/type_id=1' — search results by any field of shop_product table; e.g., type_id
* 'search/sku_id=1,2,42' - search by specified sku_ids, use field 'skus_filtered' to get exact skus only
* 'search/category_id=1,2,42' - search by product's primary category_ids
* 'type/2' — search by type_id
* 'search/name=SuperProduct' — search by 'name' field (exact match)
* 'search/color.value_id=6' — search by value with id=6 of 'checkboxes'-type feature with code 'color'
* 'filter/6' - search for all products matching the filter
* 'presentation/42' - search by saved view's filter settings specified in the backend
* @param array $options Extra options:
* 'filters' => whether products must be filtered according to GET request conditions
* 'product' => shopProduct object to select upselling items for; for upselling-type collections only
* 'conditions' => upselling items selection conditions; for upselling-type collections only
* 'params' => whether extra product params must be included in collection products
* 'absolute' => whether absolute product image URLs must be returned for collection products
* 'filter_by_rights' => (bool|string), filter products by rights
* - TRUE: leave products with right level to type >= shopRightsConfig::RIGHT_EDIT
* - FALSE: not check rights
* - int: min right level to product type (see shopRightsConfig::RIGHT_* constants). Compare will be by '>=' logic
* - 'delete': if right level to product type is shopRightsConfig::RIGHT_EDIT it also check contact_id of product. User can delete own products if level is shopRightsConfig::RIGHT_EDIT
* @throws waException
*/В ui 1.3 все эти возможности были доступны в ссылке. Можно было использовать хеш, обработать его по хуку, а потом вывести отфильтрованные товары или заказы в админке. Сейчас есть только презентации, но они не решают вопрос. Приходится в плагине наследовать shopProdList.action.php и перехватывать execute если я хочу показать какой-нибудь свой список товаров. Считаю это варварским способом.
Добавление новых комментариев к этой теме отключено.










7 комментариев
Попробуйте использовать такой способ — возможно, он будет менее затратным с точки зрения поддержания работоспособности плагина (не нужно будет следить за обновлением кода класса, унаследованного от класса приложения):
В этом случае сработает фильтр вашего плагина, который отфильтрует товары в соответствии со значением, полученным из сессии (к примеру).
Можно добавить обработчик products_collection.filter и в нем задавать хэш
function productsCollectionFilterHandler(shopProductsCollection $collection) { if (empty($collection->getHash())) { $collection->setHash(waRequest::request('hash', '', waRequest::TYPE_STRING_TRIM)); } }Интересно, но мне почему-то кажется что не сработает. Хотя можно попробовать.
не получится
protected function setHash($hash)
Получилось через рефлексию. Интересно, не сломаю ли я что-нибудь таким методом...
не должен (: единственное что, я бы по возможности использовал другую переменную вместо hash
Все таки на некоторых установках с пхп 7.4 этот метод не работает. А где-то работает. Не пойму в чем разница.
Но ui2 кажется неполноценным без возможности использовать те же ссылки с хешем, которые работали в 1.3