J'ai ajouté le module d'affichage de flux de Joomla (mod_feed) à mes besoins. Cela fonctionnait bien jusqu'à ce que j'ai mis à jour mon site de 3.3.6 à 3.4.1.
J'ai une source d'informations que j'ai affichée sur mon site Joomla. Le flux RSS est le suivant:
<channel>
<title>Zkanoca</title>
<atom:link href="http://example.com/?feed=rss2" rel="self" type="application/rss+xml" />
<link>http://example.com</link>
<description>Zkanoca loves you</description>
<lastBuildDate>Fri, 27 Mar 2015 06:02:13 +0000</lastBuildDate>
<language>tr-TR</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>http://wordpress.org/?v=4.1</generator>
<item>
<title>My news title 1</title>
<link>http://example.com/?p=142862</link>
<comments>http://example.com/?p=142862#comments</comments>
<pubDate>Thu, 26 Mar 2015 11:43:56 +0000</pubDate>
<dc:creator><![CDATA[Zkanoca]]></dc:creator>
<category><![CDATA[News]]></category>
<category><![CDATA[General]]></category>
<guid isPermaLink="false">http://example.com/?p=142862</guid>
<description><![CDATA[Some text is here]]></description>
<content:encoded><![CDATA[<p>Some text is here</p>
<a href='http://example.com/?attachment_id=142863'><img width="150" height="150" src="http://example.com/wp-content/uploads/2015/03/0124-150x150.jpg" class="attachment-thumbnail" alt="01" /></a>
<a href='http://example.com/?attachment_id=142864'><img width="150" height="150" src="http://example.com/wp-content/uploads/2015/03/0224-150x150.jpg" class="attachment-thumbnail" alt="02" /></a>]]></content:encoded>
<wfw:commentRss>http://example.com/?feed=rss2&p=142862</wfw:commentRss>
<slash:comments>0</slash:comments>
<picture>http://example.com/wp-content/uploads/2015/03/0124.jpg</picture>
</item>
.
.
.
</channel>
Réellement,
<picture>http://example.com/wp-content/uploads/2015/03/0124.jpg</picture>
la partie n'était pas dans le flux original XML. Je l'ai ajouté avec un petit bidouillage sur Wordpress.
J'ai changé le module mod_feed de Joomla afin d'avoir un module de nouvelles glissant, utilisant le composant carrousel de Bootstrap.
Cela fonctionnait correctement. Mais après avoir mis à jour le site web <picture>
noeud est vide, le carrousel ne peut donc pas afficher la photo.
J'ai essayé de rechercher ce qui a été modifié depuis le répertoire de l'API Joomla. Mais ne pouvait pas trouver un indice.
J'essaie d'afficher l'image en utilisant cette ligne:
<img src="<?php echo $feed[$i]->picture; ?>" alt="<?php echo $feed[$i]->title; ?>" />
et il sort comme
<img src="/" alt="My news title 1" />
Avant de le mettre à jour, la photo était correctement affichée. Mon code de carrousel est le suivant:
<div class="carousel-inner">
<?php
$active = 'active';
for ($i = 0; $i < $params->get('rssitems', 5); $i++) :
if (!$feed->offsetExists($i)) {break;}
$uri = (!empty($feed[$i]->uri) || !is_null($feed[$i]->uri)) ? $feed[$i]->uri : $feed[$i]->guid;
$uri = substr($uri, 0, 4) != 'http' ? $params->get('rsslink') : $uri; ?>
<div class="item <?php echo $active; ?>">
<img src="<?php echo $feed[$i]->picture; ?>" alt="<?php echo $feed[$i]->title; ?>" />
<div class="container">
<div class="carousel-caption">
<h2><a href="<?php echo $feed[$i]->uri; ?>" target="_blank"><?php echo $feed[$i]->title; ?></a></h2>
</div>
</div>
</div>
<?php
$active = '';
endfor;
?>
Après une enquête approfondie, j'ai découvert que j'avais modifié libraries/joomla/feed/feed.php
ajoutant picture
clé à la $properties
tableau:
protected $properties = array(
'uri' => '',
'title' => '',
'updatedDate' => '',
'description' => '',
'categories' => array(),
'contributors' => array(),
'picture' => '' //this line
);
J'ai aussi constaté que j'avais changé libraries/joomla/feed/parser/rss.php
Touches ajoutées, le cas échéant. Par exemple:
//line 112
protected function handlePicture(JFeed $feed, SimpleXMLElement $el) {
$feed->picture = (string) $el;
}
...
//line 355
protected function processFeedEntry(JFeedEntry $entry, SimpleXMLElement $el) {
$entry->uri = (string) $el->link;
$entry->title = (string) $el->title;
$entry->publishedDate = (string) $el->pubDate;
$entry->updatedDate = (string) $el->pubDate;
$entry->content = (string) $el->description;
$entry->guid = (string) $el->guid;
$entry->comments = (string) $el->comments;
$entry->picture = (string) $el->picture;
Après modification des fichiers de la version actuelle par rapport à ceux de la version précédente, cela fonctionne maintenant.