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

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

Поддержка мульти язычности и ЧПУ для самописного компонента

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

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

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


Метод тыка и мата помогает в кодинге


« : 10.06.2016, 00:05:52 »

Доброго времени суток уважаемые форумчане. Дорос я до того что решил попробовать написать свой компонент для Joomla (пробую написать компонент работы с турами для турфирмы по аналогии с компонентом статей). Есесн как "самый умный" попробовал написать примитивный компонент по видео уроку - как ни странно получилось и даже работает. Это дало мне возможность примерно понять как все работает. Однако нужно сделать поддержку ЧПУ урлов и мульти язычность в компоненте. К сожалению Google по запросам выдает лишь советы как настроить ЧПУ в самой Joomla и ни слова про то, как сделать мальти языность и ЧПУ для своего компонента. По сему прошу помощи у вас. Возможно кто то сталкивался с подобной задачей и может подсказать где и что искать  или же тыкнуть в доки.

То есть сейчас компонент создает запись в БД с нужными для меня полями. Я хочу сделать поддержку мультиязычности компонента как это реализованно в компоненте создания материалов Joomla и поддержку ЧПУ для ссылок на страницы моего компонента (в БД есть запись алиаса ссылки вывожу через JRoute::_(""); )
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #1 : 10.06.2016, 01:41:14 »

UPD:

с мультиязычностью разобрался: добавил в форме добавления записи в админке список с языками и в моделе выборки статей для фронтенда изменил код с проверкой на мульти язычность :

Код
<?php
defined('_JEXEC') or exit;
//Модель работает с БД и получает список  записей с турами
class TourModelTour extends JModelList {
 
protected function getListQuery() {
 
if (JLanguageMultilang::isEnabled()) {
 
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*');
$query->from('#__tour');
$query->where('`published` = 1');
$query->where('language in (' . $db->quote(JFactory::getLanguage()->getTag()). ',' . $db->quote('*'). ')');
$query->order('`id` DESC');
 
}else {
$query = $db->getQuery(true);
$query->select('*');
$query->from('#__tour');
$query->where('`published` = 1');
$query->order('`id` DESC');
}
 
return($query);
}
 
}
 
?>
 

Однако вопрос с урлами остался. Я так понимаю что в папке компонента для фронтенда в корне должен лежать фаил route.php  который будет обрабатывать ссылки. Однако мне не совсем ясно как ссылку с него передать в вид и как  фаил route,php получить сам URL ?
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #2 : 10.06.2016, 02:26:15 »

То есть сейчас компонент создает запись в БД с нужными для меня полями. Я хочу сделать поддержку мультиязычности компонента как это реализованно в компоненте создания материалов Joomla и поддержку ЧПУ для ссылок на страницы моего компонента (в БД есть запись алиаса ссылки вывожу через JRoute::_(""); )
Мультиязычность как в com_content? да нет ничего проще!
1. Добавляете поле langiage для таблицы вашей
2. В админке делаете запись мультиязычности в это поле!
3. в модели пользовательской добавляете к запросу:
Код
if ( JLanguageMultilang::isEnabled() ) {
$query->where( 'language in (' . $this->getDbo()->quote( JFactory::getLanguage()->getTag() ). ',' . $this->getDbo()->quote( '*' ). ')' );
}
 

По ЧПУ уж сколько тут тем было.. читать не перечитать!
Можете немного у меня почитать http://inet-reklama.com/blog/joomla/routing-v-joomla-jroute.html
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #3 : 10.06.2016, 02:47:12 »

По ЧПУ уж сколько тут тем было.. читать не перечитать!
Можете немного у меня почитать http://inet-reklama.com/blog/joomla/routing-v-joomla-jroute.html

ознакомился с вашей статьей - все понятно и ничего не понятно )) Я дохожу до формирования файла роута и потом у меня ступор т.к более мение вменяемой инфы или не нахожу или  где то жутко как туплю. Вот смотрите у меня сейчас router.php выглядит вот так:

Код
<?php
defined('_JEXEC') or exit;
 
function TourBuildRoute( &$query ){
   $segments = array();
if ( isset( $query['view'] ) ) {
       $segments[] = $query['view'];
unset( $query['view'] );
   }
return $segments;
}
 
 
function TourParseRoute( $segments ) {
   $vars = array();
   $count = count( $segments );
   if ( $count ) {
       $count--;
       $segment = array_shift( $segments );
       $vars['view'] = $segment;
   }
   if ( $count ) {
       $count--;
       $segment = array_shift( $segments );
       $vars['id'] = $segment;
   }
   return $vars;
}
 
 
?>
 

В свое же время макет вывода виглядит вот так:

Код
 
<?php defined('_JEXEC') or exit;
//макет вывода туров в списке
?>
 
<?php if (!empty($this->items)) : ?>
 
<?php foreach($this->items as $item):?>
<div>
<h2>
<a href="<?=JRoute::_('index.php?option=com_tour&view=item&id='.$item->id);?>"><?=$item->title;?></a>
</h2>
<div>
<?=$item->publish;?>
</div>
<div>
<?php if(!empty($item->images->image)):?>
<img src="<?=$item->images->image;?>" alt="<?=$item->title;?>">
<?php endif;?>
</div>
<div>
<?=$item->text;?>
</div>
</div>
<?php endforeach;?>
 
<div class="pagination text-center">
<p class="counter text-center">
<?=$this->pagination->getPagesCounter();?>
</p>
<?=$this->pagination->getPageslinks();?>
</div>
 
<?php endif;?>
 
 

Пробую в нем сделать print_r(); для переменной $vars которую в роутере формирует функция парсера - пишет что такая переменная не объявлена - ну это и логично  -  я ее нигде не объявлял. Но тогда в какой переменной хранится массив с инфой о правильном урле, и которая передается в макет ?
Записан
Aleks.Denezh
Практически профи
*******

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

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



« Ответ #4 : 10.06.2016, 04:07:36 »

1. JRoute::_('index.php?option=com_tour&view=item&id='.$item->id); вот это обрабатывает buildRoute (тоесть построит ссылку типа /view/item/10
2. site.ru/view/item/10 вот это обработает ParseRoute (то есть ссылку которая в браузере переведет из view/item/10 в view=item и id=10

А дальше нужно знать какую ссылку вы хотите получить что бы понять как и что делать!
Записан
voron121
Осваиваюсь на форуме
***

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

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


Метод тыка и мата помогает в кодинге


« Ответ #5 : 10.06.2016, 17:33:26 »

спасибо - сработало ! ) Правда почему то пример с вашего сайта сработал не сразу  - нашел с доков тот же практически пример однако он работает. Думаю мог быть баг при копировании кода с сайта, ну да это уже мелочи. Однозначно + Azn
Записан
Страниц: [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