Форум русской поддержки Joomla!® CMS
09.12.2016, 17:39:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Неправильно формируется ссылка

 (Прочитано 85 раз)
0 Пользователей и 1 Гость смотрят эту тему.
denism300
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 103


« : 23.11.2016, 16:30:07 »

делаю компонент, формирующий прайс товаров из VirtueMart.
ссылка на товар формируется так:
Код
$prod_url = JURI::root(). JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id, true);
$prod_url = str_replace(array('//', 'http:/'), array('/', 'http://'), $prod_url);

если выводить на экран, обращаясь к компоненту напрямую: http://site.local/index.php?option=com_component то все корректно и ссылка выглядит так, как и должна выглядеть:
Цитировать
http://site.local/index.php/wear/lady/h20-jacket-detail
если сохранять данные в файл путем нажатия кнопки в админке компонента, то ссылка формируется так:
Цитировать
http://site.local/administrator/index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=157&virtuemart_category_id=9
Записан
SmokerMan
Профи
********

Репутация: +694/-25
Offline Offline

Пол: Мужской
Сообщений: 5225



« Ответ #1 : 23.11.2016, 16:34:32 »

потому что в админке роутер не будет работать, его надо подключать
http://joomlaforum.ru/index.php/topic,331281.0.html
Записан
denism300
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 103


« Ответ #2 : 23.11.2016, 17:47:28 »

функция, выгружающая прайс в файл, не в админке. в админке, в контроллере она только вызывается, а затем проверяется, создан ли файл и выводится сообщение.
/administrator/components/com_component/controllers/objects.php
Код
require_once(JPATH_ROOT.DS.'components'.DS.'com_component'.DS.'models'.DS.'object.php');
 
public function getFile() {
$params = JComponentHelper::getParams('com_component');
$getFile = new ComponentModelObject();
$getFile -> getFile();
if (JFile::exists($params->get('filepath'). 'price.txt')) {
JFactory::getApplication()->enqueueMessage(JText::_('COM_COMPONENT_NOTICE_FILE_SAVE_SUCCESS'). '<br /><br />' . JURI::root(). $params->get('filepath'). 'price.txt');
}
else {
JError::raiseWarning(JText::_('COM_COMPONENT_NOTICE_FILE_SAVE_ERROR'));
}
$this->setRedirect(JRoute::_('index.php?option=com_component&view=objects', false));
}

а сама функция выгрузки в файл лежит в /components/com_component/models/object.php
и представляет собой
Код
function getFile() {
$params = JComponentHelper::getParams('com_component');
$price = $this->getPrice();
JFile::write((JPATH_ROOT . DS . $params->get('filepath'). 'price.txt'), $price);
 
return true;
}

окончательно прайс формируется в функции getPrice(), которая, в свою очередь, состоит вызывает функции, формирующие заголовок прайса, список товаров и т.п.

я теперь не понимаю, как мне из админки вызвать getPrice() с подключенным роутером?
« Последнее редактирование: 23.11.2016, 17:54:01 от denism300 » Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3593


« Ответ #3 : 23.11.2016, 22:26:47 »

denism300, вы почти год по каждой мелочи бегаете на форум и вам не раз помогали, но вы никому ни разу не сказали "Спасибо!". Это не деньги платить, а всего лишь "+" к карме помогшему в знак признательности.
Записан
denism300
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 103


« Ответ #4 : 23.11.2016, 23:20:28 »

denism300, вы почти год по каждой мелочи бегаете на форум и вам не раз помогали, но вы никому ни разу не сказали "Спасибо!". Это не деньги платить, а всего лишь "+" к карме помогшему в знак признательности.
насколько я знаю, на форумах бывает специальная кнопка "спасибо" для выражения благодарностей. тут такой я не вижу. к тому же, на некоторых форумах за выражение благодарности в сообщении выдают предупреждения за оффтоп.
Записан
denism300
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 103


« Ответ #5 : 25.11.2016, 15:36:26 »

robert, я разобрался с функцией "спасибо" на этом форуме. впредь буду пользоваться.

с проблемой тоже разобрался.
в /components/com_component/models/object.php в функции getPrice() (у меня в ней формируется ссылка и остальные параметры выгружаемого товара)
подключаем роутер:
Код
$app = JApplicationCms::getInstance("site");
$router = $app::getRouter("site");

ссылку получаем так:
Код
$prod_url = $router->build(JURI::root(). JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id, true));

в итоге получаем при вызове функции из админки ссылку вида:
Цитировать
http://site.local/administrator/administrator/index.php/wear/lady/h20-jacket-detail

при вызове функции из публичной части
Цитировать
http://site.local/index.php/wear/lady/h20-jacket-detail/components/comp_name/

вот тут я не понял, почему стало добавляться к ссылке при вызове функции из публичной части вот это:
Цитировать
/components/comp_name

но пока не стал с этим заморачиваться и убрал ненужное с помощью str_replace
Код
$prod_url = str_replace(array('//', 'http:/', '/administrator', '/index.php', '/component/comp_name'), array('/', 'http://', '', '', ''), $prod_url)

вот как-то так. буду рад, если кто-то подскажет более оптимальное решение.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet