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

  • 5 Ответов
  • 230 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн denism300

делаю компонент, формирующий прайс товаров из VirtueMart.
ссылка на товар формируется так:
Код: (php) [Выделить]
$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

Re: Неправильно формируется ссылка
« Ответ #1 : 23.11.2016, 17:34:32 »
потому что в админке роутер не будет работать, его надо подключать
http://joomlaforum.ru/index.php/topic,331281.0.html

*

Оффлайн denism300

Re: Неправильно формируется ссылка
« Ответ #2 : 23.11.2016, 18:47:28 »
функция, выгружающая прайс в файл, не в админке. в админке, в контроллере она только вызывается, а затем проверяется, создан ли файл и выводится сообщение.
/administrator/components/com_component/controllers/objects.php
Код: (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
и представляет собой
Код: (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, 18:54:01 от denism300 »

*

Оффлайн robert

Re: Неправильно формируется ссылка
« Ответ #3 : 23.11.2016, 23:26:47 »
denism300, вы почти год по каждой мелочи бегаете на форум и вам не раз помогали, но вы никому ни разу не сказали "Спасибо!". Это не деньги платить, а всего лишь "+" к карме помогшему в знак признательности.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Оффлайн denism300

Re: Неправильно формируется ссылка
« Ответ #4 : 24.11.2016, 00:20:28 »
denism300, вы почти год по каждой мелочи бегаете на форум и вам не раз помогали, но вы никому ни разу не сказали "Спасибо!". Это не деньги платить, а всего лишь "+" к карме помогшему в знак признательности.
насколько я знаю, на форумах бывает специальная кнопка "спасибо" для выражения благодарностей. тут такой я не вижу. к тому же, на некоторых форумах за выражение благодарности в сообщении выдают предупреждения за оффтоп.

*

Оффлайн denism300

Re: Неправильно формируется ссылка
« Ответ #5 : 25.11.2016, 16:36:26 »
robert, я разобрался с функцией "спасибо" на этом форуме. впредь буду пользоваться.

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

ссылку получаем так:
Код: (php) [Выделить]
$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
Код: (php) [Выделить]
$prod_url = str_replace(array('//', 'http:/', '/administrator', '/index.php', '/component/comp_name'), array('/', 'http://', '', '', ''), $prod_url)
вот как-то так. буду рад, если кто-то подскажет более оптимальное решение.