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

denism300

  • Захожу иногда
  • 209
  • 5 / 0
делаю компонент, формирующий прайс товаров из 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

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

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Неправильно формируется ссылка
« Ответ #2 : 23.11.2016, 16: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, 16:54:01 от denism300 »
*

robert

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

denism300

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

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Неправильно формируется ссылка
« Ответ #5 : 25.11.2016, 14: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)

вот как-то так. буду рад, если кто-то подскажет более оптимальное решение.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ссылка на файл

Автор dimat84

Ответов: 3
Просмотров: 913
Последний ответ 18.10.2014, 21:41:27
от ELLE
[Решено] Ссылка в теле материала, различная для авторизованных и для гостей

Автор AlekVolsk

Ответов: 13
Просмотров: 1055
Последний ответ 03.10.2014, 00:06:05
от AlekVolsk