shopProduct
Класс используется для работы с одним товаром: позволяет получать информацию о товаре, модифицировать и сохранять товар в базу данных без явного обращения к классам моделей.
Array access
Работа с классом возможна путём обращения к объекту как к массиву (array access). При первом чтении данных выполняется обращение к базе данных и их загрузка в кеш. Последующее чтение извлекает данные из кеша.
Array access работает и при чтении, и при записи данных. При записи в объект данные сохраняются во внутреннем кеше, а в базу данных попадают только после вызова метода save()
.
Пример
$product = new shopProduct(100500); echo $product['name']; $product['name'] = 'Супертовар'; $product->save();
Доступные поля
// Поля таблицы 'shop_product', доступные для чтения и для записи. int $product['id'] string $product['name'] string $product['summary'] string $product['meta_title'] string $product['meta_keywords'] string $product['meta_description'] string $product['description'] int $product['contact_id'] string $product['create_datetime'] string $product['edit_datetime'] int $product['status'] int $product['type_id'] int $product['image_id'] string $product['image_filename'] string $product['video_url'] int $product['sku_id'] string $product['url'] string $product['currency'] int $product['tax_id'] int $product['count_denominator'] float $product['order_multiplicity_factor'] int $product['stock_unit_id'] int $product['base_unit_id'] float $product['stock_base_ratio'] float $product['order_count_min'] float $product['order_count_step'] float $product['base_price'] float $product['min_base_price'] float $product['max_base_price'] int $product['cross_selling'] int $product['upselling'] int $product['category_id'] string $product['badge'] int $product['sku_type'] float $product['base_price_selectable'] float $product['compare_price_selectable'] float $product['purchase_price_selectable'] // Поля таблицы 'shop_product', доступные только для чтения, потому что значения для них рассчитываются автоматически. float $product['price'] float $product['compare_price'] float $product['min_price'] float $product['max_price'] string $product['ext'] float $product['rating'] int $product['rating_count'] float|null $product['count'] float|null $product['total_sales'] int $product['sku_count'] // Поля объекта, доступные для чтения и для записи. // Более подробную информацию см. в описаниях методов getData() и setData() соответствующего класса модели. array $product['params'] // shopProductParamsModel array $product['skus'] // shopProductSkusModel array $product['sets'] // shopProductSetsModel array $product['tags'] // shopProductTagsModel array $product['features'] // shopProductFeaturesModel array $product['features_selectable'] // shopProductFeaturesSelectableModel array $product['categories'] // shopProductCategoriesModel array $product['og'] // shopProductOgModel // Поля объекта, доступные только для чтения. // Более подробную информацию см. в описании соответствующего метода. array $product['type'] // getType() string $product['currency_html'] // getCurrencyHtml() waContact $product['contact'] // getContact() array $product['images'] // getImages() array $product['pages'] // getPages() array $product['next_forecast'] // getNextForecast() array $product['reviews'] // getReviews() array $product['sku_features'] // getSkuFeatures()
Публичные методы
-
__construct
Конструктор класса.
-
isFrontend
Возвращает значение параметра
$is_frontend
, переданного в конструктор класса. -
getId
Возвращает значение поля id.
-
getImages
Возвращает список изображений товара.
-
getPages
Возвращает список подстраниц товара.
-
getContact
Возвращает экземпляр класса
waContact
с информацией о пользователе, создавшем товар. -
getCurrencyHtml
Возвращает HTML-код для обозначения символа валюты товара.
-
save
Сохраняет изменения в свойствах товара в базу данных.
-
getData
Возвращает данные из внутреннего кеша класса без обращения к базе данных.
-
setData
Записывает значение указанного поля во внутренний кеш класса.
-
getType
Возвращает информацию о типе товара.
-
upSelling
Возвращает список товаров, настроенных как схожие и альтернативные для данного товара.
-
crossSelling
Возвращает список товаров, настроенных как перекрёстные продажи для данного товара.
-
getNextForecast
Возвращает информацию о продажах товара за последние 90 дней и оценку продаж на будущее.
-
getReviews
Возвращает список отзывов покупателей о товаре.
-
getSkuFeatures
Возвращает информацию о значениях характеристик, указанных в свойствах модификаций товара.
-
checkRights
Возвращает информацию о правах доступа авторизованного пользователя к редактированию данного товара.
-
duplicate
Создаёт копию товара.
-
getProductUrl
Возвращает URL страницы товара на витрине.
-
getCanonicalCategory
Возвращает данные основной категории товара.
-
getCategoryUrl
Возвращает основной фрагмент URL основной категории товара.
-
getBreadcrumbs
Возвращает массив данных для формирования ссылок навигации с помощью «хлебных крошек» относительно страницы товара на витрине.
-
getVideo
Возвращает информацию о видеоролике товара.
-
getSkus
Возвращает информацию о модификациях товара.
-
getFeatures
Возвращает информацию о характеристиках товара.
public function __construct ($data = array(), $is_frontend = false)
Конструктор класса.
Параметры
-
$data
Либо ID товара, либо массив с данными товара, ключи которого соответствуют полям таблицы shop_product.
-
$is_frontend
Флаг, обозначающий режим использования экземпляра класса контроллерами фронтенда. В режиме фронтенда выполняется округление всех цен, возвращаемых этим классом, если округление настроено для валюты, выбранной текущим авторизованным пользователем. Значения полей в режиме фронтенда доступны только для чтения.
Пример
$product = new shopProduct(100500); echo $product['name'];
public function isFrontend()
Возвращает значение параметра $is_frontend
, переданного в конструктор класса.
Пример
$product = new shopProduct(100500, true); if ($product->isFrontend()) { echo 'Объект товара — в режиме фронтенда!'; }
public function getId()
Возвращает значение поля id. Эквивалентно считыванию поля id.
Пример
$product = new shopProduct(100500); echo $product->getId(); //100500 echo $product['id']; //100500
public function getImages ($sizes = array(), $absolute = false)
Возвращает список изображений товара. Ключи массива — ID изображений, каждое значение массива — подмассив с информацией об изображении.
Параметры
-
$sizes
Размеры изображений, URL которых должны содержаться в возвращаемом массиве, в одном из следующих форматов:
- Ассоциативный массив key => size. В подмассив информации о каждом изображении добавляются элементы с ключами вида 'url_...' с каждым key вместо многоточия, значениями которых являются URL эскизов изображения с размерами, указанными в каждом size в одном из следующих форматов:
- ...x... (например, '96x96'): прямоугольник с указанной шириной и высотой, уменьшенный с сохранением пропорций до одного из указанных размеров, с отсечением части изображения, не вписавшейся в полученный уменьшенный прямоугольник;
- ...x0 (например, '96x0'): прямоугольник, уменьшенный с сохранением пропорций до указанной ширины;
- 0x... (например, '0x96'): прямоугольник, уменьшенный с сохранением пропорций до указанной высоты;
- ... (например, '96'): прямоугольник, уменьшенный с сохранением пропорций до указанной максимальной стороны.
- Простой массив строковых обозначений размеров 'big' ('970'), 'default' ('750x0'), 'default_fit' ('750'), 'thumb' ('200x0'), 'crop' ('96x96'), 'crop_small' ('48x48') или только одно из этих значений — без использования массива.
- Массив чисел, обозначающих уменьшение эскизов изображений до максимальной стороны, или только 1 число — без использования массива.
- Ассоциативный массив key => size. В подмассив информации о каждом изображении добавляются элементы с ключами вида 'url_...' с каждым key вместо многоточия, значениями которых являются URL эскизов изображения с размерами, указанными в каждом size в одном из следующих форматов:
-
$absolute
Флаг, обозначающий необходимость вернуть абсолютные URL эскизов изображений.
Пример
$product = new shopProduct(100500); $images = $product->getImages([ 'main' => '700x0', 'aux' => '200', ]); wa_dump($images);
Результат
[ 1 => [ 'id' => '1', 'product_id' => '100500', 'upload_datetime' => '2000-01-01 00:00:00', 'edit_datetime' => NULL, 'description' => '', 'sort' => '0', 'width' => '1500', 'height' => '2000', 'size' => '1000000', 'filename' => '', 'original_filename' => '01.png', 'ext' => 'png', 'badge_type' => NULL, 'badge_code' => NULL, 'edit_datetime_ts' => NULL, 'url_main' => '/wa-data/public/shop/products/00/05/100500/images/1/1.700x0.png', 'url_aux' => '/wa-data/public/shop/products/00/05/100500/images/1/1.200.png', ], ..., ]
Пример
$product = new shopProduct(100500); $images = $product->getImages('big'); wa_dump($images);
Результат
[ 1 => [ 'id' => '1', 'product_id' => '100500', 'upload_datetime' => '2000-01-01 00:00:00', 'edit_datetime' => NULL, 'description' => '', 'sort' => '0', 'width' => '1500', 'height' => '2000', 'size' => '1000000', 'filename' => '', 'original_filename' => '01.png', 'ext' => 'png', 'badge_type' => NULL, 'badge_code' => NULL, 'edit_datetime_ts' => NULL, 'url_big' => '/wa-data/public/shop/products/00/05/100500/images/1/1.970.png', ], ..., ]
Пример
$product = new shopProduct(100500); $images = $product->getImages('big'); wa_dump($images);
Результат
[ 1 => [ 'id' => '1', 'product_id' => '100500', 'upload_datetime' => '2000-01-01 00:00:00', 'edit_datetime' => NULL, 'description' => '', 'sort' => '0', 'width' => '1500', 'height' => '2000', 'size' => '1000000', 'filename' => '', 'original_filename' => '01.png', 'ext' => 'png', 'badge_type' => NULL, 'badge_code' => NULL, 'edit_datetime_ts' => NULL, 'url_big' => '/wa-data/public/shop/products/00/05/100500/images/1/1.970.png', ], ..., ]
Пример
$product = new shopProduct(100500); $images = $product->getImages(500); wa_dump($images);
Результат
[ 1 => [ 'id' => '1', 'product_id' => '100500', 'upload_datetime' => '2000-01-01 00:00:00', 'edit_datetime' => NULL, 'description' => '', 'sort' => '0', 'width' => '1500', 'height' => '2000', 'size' => '1000000', 'filename' => '', 'original_filename' => '01.png', 'ext' => 'png', 'badge_type' => NULL, 'badge_code' => NULL, 'edit_datetime_ts' => NULL, 'url_500' => '/wa-data/public/shop/products/00/05/100500/images/1/1.500.png', ], ..., ]
public function getPages()
Возвращает список подстраниц товара. Вызов эквивалентен чтению поля pages. Каждый элемент возвращаемого массива является подмассивом, содержащим значения полей таблицы shop_product_pages.
Пример
$product = new shopProduct(100500); $pages = $product->getPages(); wa_dump($pages);
Результат
[ 1 => [ 'id' => '1', 'product_id' => '100500', 'name' => 'О товаре', 'title' => 'О товаре', 'url' => 'info', 'content' => '<p>...</p>', 'create_datetime' => '2000-01-01 00:00:00', 'update_datetime' => '2000-01-01 00:00:00', 'create_contact_id' => '1', 'sort' => '0', 'status' => '1', 'keywords' => '', 'description' => '', ], ..., ]
public function getContact()
Возвращает экземпляр класса waContact
с информацией о пользователе, создавшем товар. Вызов эквивалентен чтению поля contact.
Пример
$product = new shopProduct(100500); echo $product->getContact()->getName(); // 'Иван Петров'
public function getCurrencyHtml()
Возвращает HTML-код для обозначения символа валюты товара. Вызов эквивалентен чтению поля currency_html.
Пример
$product = new shopProduct(100500); echo $product->getCurrencyHtml(); // '<span class="ruble">₽</span>'
public function save ($data = [])
Сохраняет в базу данных изменения, внесённые в свойства экземпляра класса с использованием array access либо также переданные в параметре $data
.
Параметры
-
$data
Массив вида key => value со значениями полей таблицы shop_product. Использование этого параметра эквивалентно записи каждого значения по отдельности в поля экземпляра класса с последующим вызовом этого метода без параметра.
Пример
$product = new shopProduct(); // либо сразу передаём все значения в виде параметра-массива в метод save() $product->save([ 'name' => 'Супертовар', 'url' => 'superproduct', ]); // либо сначала записываем каждое свойство по отдельности и затем вызываем метод save() без параметра $product['name'] = 'Супертовар'; $product['url'] = 'superproduct'; $product->save();
public function getData ($name = null)
Возвращает данные из внутреннего кеша класса без обращения к базе данных. Если данных в кеше нет, метод возвращает null
. Если данные в кеше есть, то вызов метода эквивалентен чтению поля экземпляра класса.
Параметры
-
$name
Поле экземпляра класса, значение которого нужно получить. Если название поля не указано, то метод возвращает всё содержимое кеша класса.
Пример
$product = new shopProduct(); $product['name'] = 'Супертовар'; $product['url'] = 'superproduct'; echo $product->getData('name'); //'Супертовар' echo $product->getData('url'); //'superproduct'
public function setData ($name, $value)
Записывает значение указанного поля во внутренний кеш класса. Эквивалентно записи значения в экземпляр класса с использованием array access.
Пример
$product = new shopProduct(); $product->setData('name', 'Супертовар'); // то же самое, но с использованием array access $product['name'] = 'Супертовар';
public function getType()
Возвращает информацию о типе товара в виде массива данных из таблицы shop_type. Вызов эквивалентен чтению поля type.
Пример
$product = new shopProduct(100500); $type = $product->getType(); wa_dump($type);
Результат
[ 'id' => '1', 'sort' => '0', 'name' => 'Обычный товар', 'icon' => 'box', 'cross_selling' => 'alsobought', 'upselling' => '0', 'count' => '3149', 'stock_unit_fixed' => '2', 'stock_unit_id' => '0', 'base_unit_fixed' => '2', 'base_unit_id' => NULL, 'stock_base_ratio_fixed' => '2', 'stock_base_ratio' => '1.00000000', 'count_denominator_fixed' => '2', 'count_denominator' => NULL, 'order_multiplicity_factor_fixed' => '2', 'order_multiplicity_factor' => NULL, 'order_count_min_fixed' => '2', 'order_count_min' => NULL, 'order_count_step_fixed' => '2', 'order_count_step' => NULL, ]
public function upSelling ($limit = 5, $available_only = false)
Возвращает список товаров, настроенных как схожие и альтернативные для данного товара.
Параметры
-
$limit
Максимальное количество возвращаемых рекомендуемых товаров.
-
$available_only
Флаг, обозначающий необходимость возвращать только рекомендуемые товары, имеющиеся на складе и доступные для заказа.
Пример
$product = new shopProduct(100500); $upselling_products = $product->upSelling(3); wa_dump($upselling_products);
Результат
[ 26521 => [ id => '26521' name => 'Боинг 747' summary => '...' ... ], 26522 => [ id => '26522' name => 'Боинг 767' summary => '...' ... ], ..., ]
public function crossSelling ($limit = 5, $available_only = false, $exclude = array())
Возвращает список товаров, настроенных как перекрёстные продажи для данного товара.
Параметры
-
$limit
Максимальное количество возвращаемых рекомендуемых товаров.
-
$available_only
Флаг, обозначающий необходимость возвращать только рекомендуемые товары, имеющиеся на складе и доступные для заказа.
-
$exclude
Массив ID товаров, которые нужно исключить из возвращаемого массива.
Пример
$product = new shopProduct(100500); $cross_selling_products = $product->crossSelling(3); wa_dump($cross_selling_products);
Результат
[ 26468 => [ id => '26468' name => 'Изделия из ротанга' summary => 'Шары, звезды, сердца, месяцы' ... ], 26469 => [ id => '26469' name => '...' summary => '...' ... ], ..., ]
public function getNextForecast()
Возвращает информацию о продажах товара за последние 90 дней и оценку продаж на будущее. Эквивалентно чтению поля next_forecast.
Пример
$product = new shopProduct(100500); $forecast = $product->getNextForecast(); wa_dump($forecast);
Результат
[ sales => 19980 // сумма продаж в основной валюте магазина sold => 2 // среднее количество продаж в месяц на базе статистики за 90 дней sold_rounded => 2 // среднее количество продаж в месяц, округлённое до целого sold_rounded_1 => 2 // среднее количество продаж в месяц, округлённое до 1 десятичного знака sold_rounded_1_str => '2.0' // среднее количество продаж в месяц, округлённое и отформатированное в виде строки profit => 19980 // прибыль с продаж, выраженная в основной валюте магазина days => 150 // количество дней, по истечении которых, согласно прогнозу, товар закончится на складе date => 1464444704 // метка UNIX дня, по истечении которого, согласно прогнозу, товар закончится на складе count => 10 // количество товара на складе ]
public function getReviews()
Возвращает список отзывов покупателей о товаре. Эквивалентно чтению поля reviews.
Пример
$product = new shopProduct(100500); $reviews = $product->getReviews(); wa_dump($reviews);
Результат
[ 1 => [ 'id' => '1', 'left_key' => '1', 'right_key' => '2', 'depth' => '0', 'parent_id' => '0', 'product_id' => '100500', 'review_id' => '0', 'datetime' => '2000-00-00 13:00:00', 'status' => 'approved', 'title' => 'Супер!', 'text' => 'Покупаю уже в сотый раз. Бескомпромиссно лучший товар на всём белом свете.', 'rate' => '5.00', 'contact_id' => '99', 'name' => NULL, 'email' => NULL, 'images_count' => '0', 'site' => NULL, 'auth_provider' => 'user', 'ip' => '2130706433', 'images' => [], 'datetime_ts' => 1668508693, 'author' => [ 'name' => 'Смирнов Виктор', 'email' => NULL, 'site' => NULL, 'id' => '1', 'is_user' => '1', 'is_company' => '0', 'photo' => '0', 'photo_url_50' => '/wa-content/img/userpic50@2x.jpg', 'photo_url_20' => '/wa-content/img/userpic20@2x.jpg', ], ], ]
public function getSkuFeatures()
Возвращает информацию о значениях характеристик, указанных в свойствах модификаций товара. Эквивалентно чтению поля sku_features.
Пример
$product = new shopProduct(100500); $sku_features = $product->getSkuFeatures(); wa_dump($sku_features);
Результат
[ 3182 => [ 'razmer' => 'L', 'weight' => shopDimensionValue object { shopDimensionValuevalue => '120' shopDimensionValueunit => 'g' shopDimensionValuetype => 'weight' shopDimensionValueunits => NULL shopDimensionValuevalue_base_unit => '0.12' shopDimensionValuebase_code => NULL shopDimensionValueformat => false id => '1' feature_id => '1' sort => '0' }, ], 3183 => [ 'razmer' => 'XL', 'weight' => shopDimensionValue object { shopDimensionValuevalue => '150' shopDimensionValueunit => 'g' shopDimensionValuetype => 'weight' shopDimensionValueunits => NULL shopDimensionValuevalue_base_unit => '0.12' shopDimensionValuebase_code => NULL shopDimensionValueformat => false id => '2' feature_id => '1' sort => '2' }, ], ]
public function checkRights()
Возвращает информацию о правах доступа авторизованного пользователя к редактированию данного товара.
Пример
$product = new shopProduct(100500); if ($product->checkRights()) { // у авторизованного пользователя есть доступ к редактированию товара }
public function duplicate()
Создаёт копию товара и возвращает экземпляр класса, соответствующего созданной копии.
Пример
$product = new shopProduct(100500); $new_product = $product->duplicate();
public function getProductUrl ($storefront = null, $set_canonical = false, $absolute = true)
Возвращает URL страницы товара на витрине.
Параметры
-
$storefront
Обозначение витрины, для которой нужно получить URL страницы товара. Доступные варианты значений:
true
: Для формирования URL страницы товара использовать адрес витрины, полученный автоматическим подбором: текущей витрины — для фронтенда, первой из списка витрин — для бекенда.- Строка с доменом и адресом витрины, например,
'mydomain.ru/shop/'
.
-
$set_canonical
Флаг, обозначающий необходимость получить канонический URL страницы товара, сформированный с учётом URL страницы его основной категории (для типов адресов «Естественный» и «Плоский»).
-
$absolute
Флаг, обозначающий необходимость получить абсолютный URL страницы товара.
Пример
$product = new shopProduct(100500); echo $product->getProductUrl(true, true, true); // http://mydomain.ru/shop/sale/superproduct/ echo $product->getProductUrl(true, true, false); // /shop/sale/superproduct/ echo $product->getProductUrl(true, false, true); // http://mydomain.ru/shop/superproduct/
public function getCanonicalCategory ($route = null)
Возвращает данные основной категории товара, если она доступна на указанной витрине.
Параметры
-
$route
Массив с параметрами витрины, для которой нужно проверить доступность основной категории товара. Если значение не указано, то проверка доступности основной категории товара на витрине не выполняется.
Пример
$product = new shopProduct(100500); $canonical_category = $product->getCanonicalCategory($route);
public function getCategoryUrl ($route = null)
Возвращает основной фрагмент URL основной категории товара, если она доступна на указанной витрине.
Параметры
-
$route
Массив с параметрами витрины, для которой нужно проверить доступность основной категории товара. Если значение не указано, то проверка доступности основной категории товара на витрине не выполняется.
Пример
$product = new shopProduct(100500); $canonical_category_url_part = $product->getCategoryUrl($route); // 'sale/accessories'
public function getBreadcrumbs ($product_link = false, $route = null)
Возвращает массив данных для формирования ссылок навигации с помощью «хлебных крошек» относительно страницы товара на витрине.
Параметры
-
$product_link
Флаг, обозначающий необходимость добавить в возвращаемый массив «хлебных крошек» информацию о товаре.
-
$route
Массив с параметрами витрины, с учётом настроек которой нужно получить данные для формирования ссылок «хлебных крошек». Если значение не указано, то учитываются настройки текущей витрины.
Пример
$product = new shopProduct(100500); $breadcrumbs_data = $product->getBreadcrumbs(true);
Результат
[ 13 => [ 'url' => '/shop/accessories', 'name' => 'Аксессуары', ], 16 => [ 'url' => '/shop/accessories/cases/', 'name' => 'Чехлы', ], 0 => [ 'url' => NULL, 'name' => 'Чехол для планшета', ], ]
public function getVideo ($sizes = array(), $absolute = false)
Возвращает информацию о видеоролике товара.
Параметры
-
$sizes
Строковое обозначение эскиза изображения видеоролика или массив таких обозначений. Допустимые варианты обозначения размеров см. в описании метода getImages(). URL эскизов с указанными размерами включаются в массив данных, возвращаемый методом.
-
$absolute
Флаг, обозначающий необходимость вернуть абсолютные URL эскизов вместо относительных.
Пример
$product = new shopProduct(100500); wa_dump($product->getVideo(['96x96', '100', '200x0'], true));
Результат
[ 'product_id' => '100500', 'orig_url' => 'http://youtu.be/...', 'url' => '//www.youtube.com/embed/...', 'width' => 560, 'height' => 315, 'images' => [ 'http://mydomain.ru/wa-data/public/shop/products/00/05/100500/video/96x96.jpg', 'http://mydomain.ru/wa-data/public/shop/products/00/05/100500/video/100.jpg', 'http://mydomain.ru/wa-data/public/shop/products/00/05/100500/video/200x0.jpg', ], ]
public function getSkus()
Возвращает информацию о модификациях товара: значения полей таблицы shop_product_skus и количество на всех настроенных складах.
Пример
$product = new shopProduct(100500); wa_dump($product->getSkus());
Результат
[ 398 => [ 'id' => '398', 'product_id' => '100500', 'sku' => '...', 'sort' => '1', 'name' => 'белый', 'image_id' => '0', 'price' => 99.0, 'primary_price' => 0.0, 'purchase_price' => 0.0, 'compare_price' => 0.0, 'count' => '12.000', 'available' => '1', 'stock_base_ratio' => NULL, 'order_count_min' => NULL, 'order_count_step' => NULL, 'status' => '1', 'dimension_id' => NULL, 'file_name' => '', 'file_size' => '0', 'file_description' => NULL, 'virtual' => '0', 'stock' => [ 2 => '0.000', 1 => '12.000', ], ], ]
public function getFeatures ($status = null)
Возвращает информацию о характеристиках товара.
Параметры
-
$status
Обозначение видимости характеристик на витрине:
'public'
(вернуть только видимые характеристики),'all'
(вернуть все характеристики),null
(на витрине: вернуть только видимые характеристики, в противном случае: вернуть все характеристики).
Пример
$product = new shopProduct(100500); wa_dump($product->getFeatures());
Результат
[ 'accessory_type' => 'чехол', 'country_of_production' => 'Китай', 'suitable_for' => [ 264 => 'планшеты', ], 'weight' => shopDimensionValue object { shopDimensionValuevalue => '0.1' shopDimensionValueunit => 'kg' shopDimensionValuetype => 'weight' shopDimensionValueunits => NULL shopDimensionValuevalue_base_unit => '0.1' shopDimensionValuebase_code => NULL shopDimensionValueformat => false id => '200' feature_id => '95' sort => '135' }, ]