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

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

Где взять адрес статьи при сохранении для занесения в БД?

 (Прочитано 176 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Karyuudo
Давно я тут
****

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

Сообщений: 352


« : 21.09.2016, 16:23:06 »

После сохранения материала (public function onContentAfterSave( $context, $article, $isNew ))

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

Записан
SmokerMan
Профи
********

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

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



« Ответ #1 : 21.09.2016, 17:40:24 »

SEF ссылку с административной части не очень просто получить, если об этом идет речь
можно так попробовать http://stackoverflow.com/questions/6746568/using-jroute-in-joomla-administrator
Код:
    require_once JPATH_ROOT.'/components/com_content/helpers/route.php';
    $app    = JApplicationCms::getInstance('site');
    $router = $app->getRouter();
    $Url = ContentHelperRoute::getArticleRoute($article->id.':'.$article->alias, $article->catid);
    $Url = $router->build($Url);
    $parsed_url = $Url->toString();
    $parsed_url = str_replace('/administrator', '', $parsed_url);

Записан
Arkadiy
Группа развития
*****

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

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


Крепитесь, други.


« Ответ #2 : 22.09.2016, 07:57:11 »

Вам лучше сохранять не адрес, а ид, алиас статьи, ид, алиас категории. При выдаче вы сможете построить корректную ссылку методом, предложенным смокером.
Записан
Septdir
Живу я здесь
******

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

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


Skype: septdir


« Ответ #3 : 22.09.2016, 12:44:59 »

Солидарен с выше сказанным, лучше хранить чисто id. Все остальное можно сделать потом. Ибо ссылка может меняться в зависмотси от пунктов меню, смены алиасов и прочих велений левой пятки. а id не изменно (ну кроме как через базу)
Записан
SmokerMan
Профи
********

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

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



« Ответ #4 : 22.09.2016, 13:37:10 »

Вам лучше сохранять не адрес, а ид, алиас статьи, ид, алиас категории. При выдаче вы сможете построить корректную ссылку методом, предложенным смокером.
ну ситуации разные бывают, мне не интересно зачем ему ссылка и что он там делать дальше с ней собирается
ну, например, надо ссылку отправить на почту
Записан
Arkadiy
Группа развития
*****

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

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


Крепитесь, други.


« Ответ #5 : 23.09.2016, 08:08:25 »

нужно занести в базу адрес сохраненной страницы.
, по этому лучше сохранять идентификаторы т.к. ссылка может измениться со временем.
Записан
Septdir
Живу я здесь
******

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

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


Skype: septdir


« Ответ #6 : 23.09.2016, 13:20:48 »

ну, например, надо ссылку отправить на почту
Удобнее в конролере или моделе пред оправкой сформировать линк.
Твой способ сверху абсолютно верен, с этим ни ко не спорит. Просто советуем ТС применять его не на вводе в базу а на выводе
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #7 : 23.09.2016, 19:03:23 »

можно так попробовать http://stackoverflow.com/questions/6746568/using-jroute-in-joomla-administrator
Код:
   require_once JPATH_ROOT.'/components/com_content/helpers/route.php';
   $app    = JApplicationCms::getInstance('site');
   $router = $app->getRouter();
   $Url = ContentHelperRoute::getArticleRoute($article->id.':'.$article->alias, $article->catid);
   $Url = $router->build($Url);
   $parsed_url = $Url->toString();
   $parsed_url = str_replace('/administrator', '', $parsed_url);

Интересный способ. В свое время мне как раз требовалось отправлять ссылки на почту из админки. Я это делал таким способом:

Код
$link = 'index.php?option=com_content&view=article&id=' . $id . ':' . $alias .'&catid=' . $category_id;
$router = JRouter::getInstance('site');
$router->setMode(JROUTER_MODE_SEF);
$uri = $router->build($link);
$uri->setPath( str_replace(JURI::base(true), JURI::root(), $uri->getPath() ));
echo $uri;
 

Если материал не привязан к пункту меню то ваш вариант почему то добавляет ?Itemid=ид_homepage
Мой вариант правда не учитывает привязку материала к пунктам меню. Но это несложно сделать впринципе. Найти пункт меню с этим материалом и добавить Itemid параметр к исходной ссылке
« Последнее редактирование: 23.09.2016, 19:06:29 от zomby6888 » Записан
Septdir
Живу я здесь
******

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

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


Skype: septdir


« Ответ #8 : 23.09.2016, 19:23:01 »

Интересный способ.
Кстати подобные хелперы существуют почти у всех крупных компонентов, очень удобно, хоть и не всегда корректно работают.
« Последнее редактирование: 23.09.2016, 19:31:50 от Septdir » Записан
b2z
Support Team
*****

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

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


Разраблю понемногу


« Ответ #9 : 25.11.2016, 16:02:38 »

Я такую функцию использую для генерации из админки:
Код
public function getAdminRoute($url)
{
$app    = JApplicationCms::getInstance('site');
$router = $app->getRouter();
$route  = $router->build($url);
 
return rtrim(JUri::root(), '/'). preg_replace('/administrator\//', '', $route, 1);
}
 

Тогда для com_content:
Код
require_once JPATH_ROOT.'/components/com_content/helpers/route.php';
$articleUrl = $this->getAdminRoute(ContentHelperRoute::getArticleRoute($article->id.':'.$article->alias, $article->catid));
« Последнее редактирование: 25.11.2016, 16:05:45 от b2z » Записан
Страниц: [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