我为朋友维护一个网站,我没有创建。它使用Symphony CMS,我的XML / XSLT / XPATH知识充其量只是基础。这是一个有Instagram提要部分的页面,最近停止显示图像,现在只显示Alt文本" Instagram。"
该模板的相关代码是:
<section>
...
<xsl:for-each select="instagram/rss/channel/item[position() < '5']">
<div class="one-quarter left">
<img class="border" src="{image/url}" alt="Instagram" />
</div>
</xsl:for-each>
...
</section>
本节中的数据源蓝图是动态XML,它来自https://websta.me/rss/n/vubrew的RSS源:
<rss xmlns:admin="http://webns.net/mvcb/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" version="2.0">
<channel>
<title>vubrew's feed - WEBSTA</title>
<link>https://widget.websta.me/rss/n/vubrew</link>
<description>
WEBSTA's RSS Feed - Websta is the best Instagram Web Viewer
</description>
<dc:language>en</dc:language>
<dc:creator>WEBSTA</dc:creator>
<pubDate>Fri, 19 Aug 2016 07:01:29 +0900</pubDate>
<atom:link href="https://widget.websta.me/rss/n/vubrew" rel="self" type="application/rss+xml"/>
<item>
<pubDate>Fri, 19 Aug 2016 00:32:44 +0900</pubDate>
<title>Fri, 19 Aug 2016 00:32:44 +0900</title>
<description>
Join Veterans United, Pit Sisters, and The Jed Fund tonight from 6 to 9 for the Mission Pawsible: TAILS kickoff event! There will be a food truck, raffles, and a silent auction, and $1 from every pint sold during the event will be donated to this great cause.
</description>
<atom:link href="https://websta.me/p/1319648356028404744_761313738"/>
<media:thumbnail url="https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/13696890_1570626159907795_1849825203_n.jpg?ig_cache_key=MTMxOTY0ODM1NjAyODQwNDc0NA%3D%3D.2"/>
<guid>https://websta.me/p/1319648356028404744_761313738</guid>
</item>
<item>...</item>
...
</channel>
</rss>
据我所知,看起来WEBSTA最近可能更改了XML Feed的格式,因此{image/url}
不再适用于选择现在显示在media
命名空间下的图像media:thumbnail/url
。
我在Symphony管理控制面板中为Instagram数据源添加了新的media
命名空间,其URI为http://search.yahoo.com/mrss/
。 (RSS源中指定的其他内容已经存在。)
我尝试将图片源更改为{thumbnail/url}
,这会产生相同的结果(只是Alt文本)和{media:thumbnail/url}
,这会导致出现有关无效名称空间前缀的错误:< / p>
XSLTProcessor::transformToXml():
Undefined namespace prefix
xmlXPathCompiledEval: evaluation failed
XPath evaluation returned no result.
尝试在浏览器中提取media
http://search.yahoo.com/mrss/
URI重定向到Yahoo的主页,我发现一些信息表明此规范可能会在其他地方维护,但我似乎无法找到备用URI。所以我想知道这是否是问题的一部分?
不可否认,我的XML / XSLT / XPATH知识很薄,所以我不确定我是不是没有正确指定元素,或者问题是否与可能已移动的媒体名称空间URI有关。我还认为我可能需要以某种方式刷新Symphony以识别数据源中的新命名空间,但我没有看到任何可以实现这一点的内容。
我很欣赏任何见解。
答案 0 :(得分:1)
我将从XSLT的角度给出答案,因为我不了解Symphony,但通常您会在根// Check if id is send, and delete from session accordingly
if(isset($_GET['id'])){
$productID = $_GET['id'];
if( $index = array_search($productID, $_SESSION['product']) ) {
$_SESSION['product'][$index] = null;
unset($_SESSION['product'][$index]);
header('Location: http://www.web.nl/_extern/web/offerte.php');
}
}
if(count($_SESSION['product']) == 0){
echo 'No products added';
}else{
foreach($offertecr as $product){
$offerte_imgs = $product['images']; // Get image parameters of the article
$offertepic = json_decode($offerte_imgs); // Split the parameters apart
if($offertepic->{'image_intro'} != ''){
$image = 'cms/'.$offertepic->{'image_intro'};
}else{
$image = 'http://www.web.nl/_extern/web/cms/images/Producten/Untitled-7.jpg';
}
if($product['id'] != ''){
if (strlen($product['introtext']) > 100){
$shortcat = substr($product['introtext'], 0, 100) . '...';
}else{
$shortcat = $product['introtext'];
}
$deleteLink = "offerte.php?id=".$product['id'];
$offerteoverzicht .= '
<div class="row productofferte">
<a href="producten/'.$product['alias'].'.html">
<div class="col-md-6 offerteimg">
<img style="border:1px solid #ddd;" src="'.$image.'">
</div>
</a>
<div class="desc">
<a style="color:#2d4160;" href="producten/'.$product['alias'].'.html"><p style="font-weight:bold;">'.$product['title'].' </a>
<a href="'.$deleteLink.'">
<i class="fa fa-times" aria-hidden="true"></i>
</a>
</p>
<p>'.$shortcat.'</p>
</div>
</div>';
}
}
}
echo $offerteoverzicht;
元素上声明名称空间。例如,在这种特殊情况下,它看起来像这样:
xsl:stylesheet
然后,在XSLT中的任何位置使用该命名空间应该没有问题,因此您的<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:media="http://search.yahoo.com/mrss/"
exclude-result-prefixes="media">
标记会看起来这样(注意<img>
是一个属性,因此您需要使用{{ 1}}相应的前缀)
url
请注意,如果仅限于允许更改Symphony中的模板,您实际上也可以在模板上声明命名空间。因此,您可以像这样编写模板:
@