我正在使用contao 4.4实例。我在谷歌站点地图生成中遇到了问题。 我有一个新闻通讯页面(页面类型=常规)。在那个页面中,我有一些通讯文章(有预告片)。当我生成站点地图时,这些文章的网址会生成两次。当我检查核心时,我发现了一个创建用于生成站点地图的页面数组的类
供应商/ contao /芯束/ SRC /资源/ contao /类/ Backend.php
第662 - 680行。
附加'文章/'与预告片的文章。因此站点地图生成网址
with articles /
列出项目
没有文章/
第一个是正确的url.Second Url生成404.我如何解决这个问题?
我的网站配置如下
- >创建了一个隐藏在导航中的常规页面,并使用配置show teaser创建了文章 - >创建另一个页面并创建元素作为'预告文章'并从上页选择文章
答案 0 :(得分:0)
那么您的网站结构是这样的吗?
这是对的吗?如果是,这可能是解决方案:
在“网站结构”中,您可以编辑第2页:向下滚动到“专家设置”,有一个选项“在站点地图中显示”,您可以选择“从不显示”。
答案 1 :(得分:0)
我解决了这个问题。 网址是从简报包中重新生成的。在核心包中,生成带有预告片的文章的网址。 newsletter-bundle还包含用于创建可搜索页面数组的钩子。钩子重新生成url。我在vendor / contao / newsletter-bundle / src / Resources / contao / classes / Newsletter.php中写了一个函数来检查数组是否包含任何重复的url。
修改函数getSearchablePages()(第889-897行 )
if($this->checkValidUrl($arrPages, $objItem, $strUrl)){
$arrPages[] = sprintf($strUrl, ($objItem->alias ?: $objItem->id));
}
定义用于查找重复的新功能
public function checkValidUrl($arrPages, $objItem, $strUrl)
{
$alias = $objItem->alias ?: $objItem->id;
$urlExplode = explode('%s', $strUrl);
$articleUrl = $urlExplode[0] . 'articles';
foreach ($arrPages as $arrPage) {
$validarticleUrl = $articleUrl . '/' . $alias;
if (strcasecmp($arrPage,$validarticleUrl) == 0) {
return false;
}
}
return true;
}