Заблудился в MVC или Feed "с чистого листа" в Joomla

Fellix

Новичок
Такая задача возникла, создать feed с полностью своими тегами для стороннего компонента Joomla

Как я понимаю всё проходит через /libraries/joomla/document/feed/feed.php, а дальше подключаются atom.php или rss.php
но там свои правила и теги уже прописаны, а мне нужно "с чистого листа" со своими тегами.

Файл со всеми нужными переменными view.feed.php у компонента есть, но опять же, все передается в библиотеку Джумлы:

PHP:
    $item = new JFeedItem();
    $item->title         = $topname;
    $item->link         = $link;
    $item->description     = $desc;
    $item->date            = $this->escape($row->creatdate);
    $document->addItem( $item );
Направьте пожалуйста кто знает, не соображу с какой стороны подступиться ))
 

Fellix

Новичок
Пробовал. И очередной раз пожалел что вообще спросил.
Молчат как рыбы :(
 

Ragazzo

TDD interested
Fellix
Такая задача возникла, создать feed с полностью своими тегами для стороннего компонента Joomla
Вот рецепт:
1. Прочитать книгу по PHP (хотя бы котерова и его 1280 стр. PHP5) на это уйдет максимум месяц, если выбирать самое нужное
2. Разобраться в Joomla
3. Закончить проект и перейти на FW
4. Программировать в удовольствие
5. ?????
6. PROFIT!!!
 

lagoff

Новичок
Спасибо, очень помогли...
Не обращайте внимание, тут у каждого второго ЧСВ шкалит.

а мне нужно "с чистого листа" со своими тегами
Ну т.е. вам нужен свой рендерер. Не знаю какую версию вы используете, но в 2.5 свой рендерер по-нормальному подключить нельзя. Можно выбрать только из предлагаемых.

Поэтому вариантов как бы два:
1) Встроить этот самый рендерер прямо во вью.
2) Использовать xml view вместо feed
 

lagoff

Новичок
В догонку: можно, кстати, еще отнаследоваться и от JFeedDocument и переопределить метод render.
 

Fellix

Новичок
lagoff, огромное спасибо!

1) Встроить этот самый рендерер прямо во вью.
Это думаю то что надо, так и хотел делать. Но по какому адресу потом будет доступен фид?
То есть я так понимаю, что в файле view.feed.php я отказываюсь от кода отправки данных в библиотеку джумла (приведенный выше) и организовываю фид прям в этом файле.
Но как я потом до него достучусь? Этот момент не соображу)
 

lagoff

Новичок
Ну а по какому адресу он исполняется в обычном случае?
 

Fellix

Новичок
Хвост урл выглядит так во всех случаях с фидом - site.ru/put_do_komponenta?format=feed&type=rss либо *?format=feed&type=atom
rss.php и atom.php как раз и подключаются в зависимости от урл
 

lagoff

Новичок
Fellix,

Придется вам поковырять исходники. Я давно с джумлой не работал, поэтому без четкого знания воркфлоу мне сложно отвечать. Но бегло глядя на application.php, а именно
PHP:
$document->setTitle($params->get('page_title'));
$document->setDescription($params->get('page_description'));
$contents = JComponentHelper::renderComponent($component);
$document->setBuffer($contents, 'component');
и далее
PHP:
// Render the document.
JResponse::setBody($document->render($caching, $params));
вполне понятны направления куда копать. Так что копайте, делайте, потом расскажете.
 

Fellix

Новичок
lagoff огромное спасибо!
Главное направление дали куда копать)) Разберусь.
Обязательно отпишусь как решу задачку))
 

Fellix

Новичок
Дошли руки, вроде решил проблему.

Реализовал на сколько позволяют мои скудные знания, так что сильно не пинайте ))

В файле:
/libraries/joomla/document/feed/feed.php
добавил после класса:
PHP:
class JFeedItem
свой:
PHP:
class JFeedItemNew
и прописал в нем нужные мне данные:
PHP:
	 var $markname;
	 var $modelname;
	 var $countryname;
	 var $bodytypename;
.........
	 var $userphone;
	 var $vincode;
	 var $imglink;
	 var $cityname;
В директории:
/libraries/joomla/document/feed/renderer/
рядом с имеющимися atom.php и rss.php добавил свой файл newsrss.php
с измененными по сравнению с rss.php всего двумя строчками:
PHP:
class JDocumentRendererNEWSRSS // новый класс
$syndicationURL =& JRoute::_('&format=feed&type=newsrss'); // путь к новому фиду
В файле компонента view.feed.php для которого это всё делается, после строк стандартной отправки в rss ленту:
PHP:
	$item = new JFeedItem();
	$item->title = $topname;
	$item->link = $link;
	$item->description = $desc;
	$item->date = $creatdate;
	$document->addItem( $item );
добавил свои:
PHP:
 $itm = new JFeedItemNew();

	$itm->imglink = $imglink;	
	$itm->userphone = $userphone;	
	$itm->username = $username;
	$itm->markname = $markname;
	$itm->modelname = $modelname;
........
	$itm->transname = $transname;
	$itm->mileage = $mileage;
	$itm->drivename = $drivename;
	$itm->date = $creatdate;
	$document->addItem( $itm );
Вот как-то так.
Остался и стандартный фид и появился новый.
Ну а построить тело фида для своих нужд уже дело техники в новом файле newsrss.php

Чуть не забыл, Joomla 1.5
Может кому пригодится...
 
Сверху