Не зарегистрирован
Вход
Забыли пароль?
Регистрация
Подписаться
Сэкономьте время — перед вопросом на форуме узнайте, как найти ответ быстрее
По техническим проблемам необходимо обращаться в Консультационный центр

Поиск по форуму: 

Приглашаем в блог Amiro.CMS. Регулярные обзоры, опыт, решения, практикумы.

Форум  ->   Разработка плагинов, вопросы по API  ->  Получить полную ссылку на категорию/товар

Раздел для разработчиков. Обсуждение создания плагинов, вопросы и пожелания по API Amiro.CMS

Добавлено: 10.07.14 17:52:00 #1



Регистрация: 10.06.14
Сообщений: 35


Обратиться по имени

Добрый день, подскажите есть ли метод, которым можно получить полную ссылку на товар или категорию?
getProductInfo получает sublink и товара и его категории, но не получает урлы родительских категорий, можно конечно самому обратиться к базе и брать названия категорий по id_parent пока не упрешься в 0, и добавить в начало язык категории, но не факт что это будет стабильное решение.



Добавлено: 11.07.14 15:09:55 #2

Амиро



Регистрация: 29.04.11
Сообщений: 13


Обратиться по имени

Для получения полной ссылки страницы товара или категории, вы можете использовать метод getFullURL модели элемента товара или категории.
http://manual.amiro.ru/docs/api6/ModuleComponent/Model/AMI_ModTableItem.html#methodgetFullURL



Добавлено: 11.07.14 20:38:12 #3



Регистрация: 10.06.14
Сообщений: 35


Обратиться по имени

Спасибо, но почему-то метод не срабатывает,
$shop_item_table_object = AMI::getResourceModel('eshop_item/table');
        $selected_catalog_item=$shop_item_table_object->getItem($item_id);
        $item_url=$selected_catalog_item->getFullURL();

не находит локаль: No page locale value found for module 'eshop_item' (0). You should add `lang' selecting from DB by calling addNavColumns(), попробовал вместо него getURL(), он не нашел sublink. В базе проверил эти свойства имеются.
$shop_item_table_object = AMI::getResourceModel('eshop_item/table');
        $selected_catalog_item=$shop_item_table_object->getItem($item_id);
        $selected_catalog_item->addNavColumns();
        $item_url=$selected_catalog_item->getFullURL();

При добавлении addNavColumns, его не узнает: Call to undefined method AmiCatalog_Items_TableItem::addNavColumns()



Добавлено: 12.07.14 17:17:58 #4



Регистрация: 10.06.14
Сообщений: 35


Обратиться по имени

addNavColumns видимо метод только списка http://manual.amiro.ru/docs/api6/ModuleComponent/Model/AMI_ModTableList.html#methodaddNavColumns
Для item вроде бы есть аналогичный метод
http://manual.amiro.ru/docs/api6/ModuleComponent/Model/AMI_ModTableItem.html#methodaddFields, но item его тоже не узнал
$shop_item_table_object->addFields(array('lang','sublink';)); 

Call to undefined method AmiCatalog_Items_Table::addFields()
попробовал как в примере
$shop_item_table_object->find(1, array('lang', 'sublink';)); 

но getFullURL() это не помогло, он по прежнему не находит локаль.

В конце концов удалось таки это сделать через модель списка:
$modId = 'eshop_item';
        AMI::initModExtensions($modId);
        $items = AMI::getResourceModel($modId. '/table')
            ->getList()
            ->addColumns($fields)
            ->addWhereDef('AND i.id='. $item_id)
            ->addNavColumns('lang', 'ru')
            ->requestModLinks()
            ->load();
        foreach($items as $item){
            $item_url[]=$item->getFullURL();
        }

в $item_url наконец что-то есть



Добавлено: 12.07.14 18:03:20 #5



Регистрация: 10.06.14
Сообщений: 35


Обратиться по имени

Для категории
$modId = 'eshop_cat';
, а остальное не меняется.



Добавлено: 13.07.14 13:10:30 #6

Амиро



Регистрация: 29.04.11
Сообщений: 13


Обратиться по имени

В коде, приведенном вами первым, есть ошибка.
$selected_catalog_item=$shop_item_table_object->getItem($item_id);

Метод getItem не подразумевает передачу id элемента.
http://manual.amiro.ru/docs/api6/ModuleComponent/Model/AMI_ModTable.html#methodgetItem
Он возвращает новый элемент с незаполненными полями. Т.е., вы работали с несуществующим объектом, в котором данные о языке и странице еще не были известны, что и стало причиной ошибки.

Корректное получение элемента по идентификатору выполняется с использованием метода find.
http://manual.amiro.ru/docs/api6/ModuleComponent/Model/AMI_ModTable.html#methodfind
$selected_catalog_item=$shop_item_table_object->find($item_id);




Добавлено: 13.07.14 17:06:37 #7



Регистрация: 10.06.14
Сообщений: 35


Обратиться по имени

А, вот оно что, спасибо. getItem в документации первым внимание привлекает, теперь как прочитал описание find ясно что это то что надо, а так не догадался бы глянуть.



Добавлено: 16.07.14 20:57:24 #8



Регистрация: 26.05.08
Сообщений: 984


Обратиться по имени

У меня вот такой код:

$oItemModel = AMI::getResourceModel('eshop_item/table')->getItem();
$oItemModel->addFields();
$oItemModel->addSearchCondition(array('id' => 165));
$oItemModelItem = $oItemModel->load();
echo $oItemModelItem->getFullURL();


Выводит catalog/atakujuschij-tigr, хотя я жду от него catalog/internet-magazin/mebel-dlja-vannoj/damixa/atakujuschij-tigr

Что я делаю не так?



Добавлено: 16.07.14 22:19:29 #9

Партнер


Регистрация: 15.07.14
Сообщений: 1


Обратиться по имени

Евгений Лапин:
Выводит catalog/atakujuschij-tigr, хотя я жду от него catalog/internet-magazin/mebel-dlja-vannoj/damixa/atakujuschij-tigr

У меня ваш код сработал с тем же результатом. Попробовал еще
     $oItemModel = AMI::getResourceModel('eshop_item/table')->find(165);
        $oItemModel->addFields();
        $oItemModelItem = $oItemModel->load();
что в принципе то же самое и результат тот же. Попробовал указать те же что и у меня, не помогло. Наверное чего-то не хватает, я как сделал через модель списка так и оставил, работает.



Добавлено: 16.07.14 22:24:19 #10



Регистрация: 10.06.14
Сообщений: 35


Обратиться по имени

Блин, с корпоративной учетки отписался, в общем если что мой код выше работает



Добавлено: 17.07.14 06:08:43 #11



Регистрация: 26.05.08
Сообщений: 984


Обратиться по имени

А у меня Ваш код дает совершенно аналогичный моему результат.



Добавлено: 17.07.14 09:21:30 #12

Амиро



Регистрация: 21.03.07
Сообщений: 258


Обратиться по имени

Нужно инициализировать расширения, в том числе категорийное:
<?php

require_once 'ami_env.php';

$oTable = AMI::getResourceModel(
    'eshop_item/table',
    array(
        array(
            'extModeOnConstruct' => 'common'
        )
    )
);
$oItem = $oTable->find(165);
//$oItem->addFields();
echo $oItem->getFullURL();



Добавлено: 17.07.14 10:40:42 #13



Регистрация: 26.05.08
Сообщений: 984


Обратиться по имени

То же самое: код

$oItemModel = AMI::getResourceModel(
	'eshop_item/table', 
	array(
		array(
			'extModeOnConstruct' => 'all'
		)
	)
);
$oItemModelItem = $oItemModel->find(165);
echo $oItemModelItem->getFullURL();


опять дает мне catalog/atakujuschij-tigr

'extModeOnConstruct' => 'all'


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

делаю я это во фронт функции, может там чего-то недоступно?



Добавлено: 17.07.14 10:54:18 #14

Амиро



Регистрация: 21.03.07
Сообщений: 258


Обратиться по имени

Укажите версию системы.



Добавлено: 17.07.14 11:38:36 #15



Регистрация: 26.05.08
Сообщений: 984


Обратиться по имени


Создать новую тему

Всего тем: 6587
Всего сообщений: 27636
Всего зарегистрированных пользователей: 47881
Последний зарегистрированный пользователь: user75140008