INDEX
Scope
This article is intended for use with Kohana 2.x version. I have tested only with the latest, which is 2.3.4 as of today.
Kohana’s « Feed » helper
The official documentation of the helper is located here :https://docs.kohanaphp.com/helpers/feed
With this helper you can easily create an RSS feed, however the method doesn’t natively support nested tags. So … won’t work and you’ll get this error :
1 | SimpleXMLElement::addChild() expects parameter 2 to be string, array given |
Workaround : syntax in your controller
Logic tends to nest your tags into a sub-array, like this :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public function rss() { $info = array ( 'title' => 'Christian Lapie' , 'notes' => 'Latest updates' ); $items = ORM::factory( 'article' ) ->where( 'statut' , 'publie' ) ->orderby( 'date' , 'desc' ) ->find_all(); $rssitems = array (); foreach ( $items as $item ) { $rssitems [] = array ( 'title' => $item ->titre, 'link' => Kohana::config( 'site.url_site' ). '/oeuvres/' . $item ->id. '/' .url::title( $item ->titre), 'description' => $item ->soustitre, 'author' => 'Christian Lapie' , 'pubDate' => date ( "D, d M Y H:i:s +0100" , strtotime ( $item -> date )), 'image' => array ( 'url' => Kohana::config( 'site.url_site' ). '/IMG/arton' . $item ->id. '.jpg' , 'title' => $item ->titre, 'link' => Kohana::config( 'site.url_site' ). '/oeuvres/' . $item ->id. '/' .url::title( $item ->titre) ) ); } echo feed::create( $info , $rssitems ); exit (); } |
(look carefully at the image key and its sub-pairs)
Editing Kohana’s core
It turns out to be pretty simple.
You will open the following file :
1 | /system/helpers/feed .php |
Then find the following lines (around 114) :
1 2 | // Add the info to the row $row ->addChild( $name , $value ); |
Finally replace the block with this :
1 2 3 4 5 6 7 8 9 | // Add the info to the row if ( is_array ( $value )) { $temp = $row ->addChild( $name ); foreach ( $value as $key1 => $value1 ) { $temp ->addChild( $key1 , $value1 ); } } else { $row ->addChild( $name , $value ); } |
Et voilà !
Now you can have a nicely valid tag :
Result
1 2 3 4 5 6 7 8 9 10 11 12 | < item > < title >Les secrets d'un temps immense</ title > < link >https://lapie.localhost/oeuvres/318/les-secrets-dun-temps-immense</ link > < description >Varsovie, Blonie, Pologne (Poland)</ description > < author >Christian Lapie</ author > < pubDate >Wed, 12 Jan 2011 00:00:00 +0100</ pubDate > < image > < url >https://lapie.localhost/IMG/arton318.jpg</ url > < title >Les secrets d'un temps immense</ title > < link >https://lapie.localhost/oeuvres/318/les-secrets-dun-temps-immense</ link > </ image > </ item > |
You can add optional parameters such as Width, Height… see the RSS Specifications here.
Please leave comment if you have found another (official) solution !
Germain
Great post. Exactly solved my problem.
In my case the file that need to be revised is located here:
SYSPATH/classes/Kohana/Feed.php [ 163 ]
Thanks for sharing.
Glad it helped!