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

voron121

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

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

voron121

  • Захожу иногда
  • 220
  • 1 / 0
  • Метод тыка и мата помогает в кодинге
UPD:

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

Код: php
<?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

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

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

voron121

  • Захожу иногда
  • 220
  • 1 / 0
  • Метод тыка и мата помогает в кодинге
По ЧПУ уж сколько тут тем было.. читать не перечитать!
Можете немного у меня почитать http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/routing-v-joomla-jroute.html

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

Код: 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

<?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

  • Живу я здесь
  • 3406
  • 428 / 4
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

  • Захожу иногда
  • 220
  • 1 / 0
  • Метод тыка и мата помогает в кодинге
спасибо - сработало ! ) Правда почему то пример с вашего сайта сработал не сразу  - нашел с доков тот же практически пример однако он работает. Думаю мог быть баг при копировании кода с сайта, ну да это уже мелочи. Однозначно + :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

ajax загрузка компонента на странице материала К2

Автор Divn

Ответов: 0
Просмотров: 524
Последний ответ 13.01.2023, 15:05:52
от Divn
Ошибка при установке компонента

Автор JackThaCat

Ответов: 6
Просмотров: 1471
Последний ответ 11.11.2022, 06:04:13
от Satelitte
Убрать префикс языка многоязычного сайта для компонента

Автор vigiv

Ответов: 0
Просмотров: 444
Последний ответ 25.04.2022, 18:11:47
от vigiv
Удаление непонятного компонента из Joomla 3

Автор phvsfpgs

Ответов: 7
Просмотров: 527
Последний ответ 24.09.2021, 20:49:54
от ProtectYourSite
Не сохраняются изменения при работе компонента

Автор polezniy

Ответов: 16
Просмотров: 725
Последний ответ 03.07.2021, 01:32:13
от polezniy