我生成站点地图,但是当我在我的服务器中运行编辑器更新时,我得到错误。 此程序包会导致错误https://github.com/spatie/laravel-sitemap
因为服务器的php版本是7.0,但包的要求是7.1。
他们有没有替代解决方案,没有更新PHP版本? 或者他们有一个简短的方法来获取我的网站的所有链接?提前谢谢:)
答案 0 :(得分:0)
你可以改用这个包:
https://github.com/Laravelium/laravel-sitemap
这里有一个大型站点地图示例:
/** @var Sitemap $sitemap */
$sitemap = \App::make("sitemap");
// add item to the sitemap (url, date, priority, freq)
$sitemap->add(route('home'), new Carbon(), '1.0', 'hourly');
$sitemapNumber = 1;
/** @var Application $application */
Application::with('applicationImages')->chunk(200, function ($applications) use ($sitemap, &$sitemapNumber) {
foreach ($applications as $application) {
$images = [];
$images[] = ['url' => url($application->icon->url()), 'title' => $application->name];
if (!empty($application->applicationImages))
foreach ($application->applicationImages as $applicationImage) {
$images[] = ['url' => url($applicationImage->image->url()), 'title' => $application->name];
}
$sitemap->add(route('application.show', $application->routeArray()), $application->updated_at->format('c'), '0.5', 'daily', $images);
}
// generate new sitemap file
$sitemap->store('xml', 'sitemap-' . $sitemapNumber);
// add the file to the sitemaps array
$sitemap->addSitemap(secure_url('sitemap-' . $sitemapNumber . '.xml'));
// reset items array (clear memory)
$sitemap->model->resetItems();
// count generated sitemap
$sitemapNumber++;
});
$sitemap->store('sitemapindex', 'sitemap', public_path());
return true;
答案 1 :(得分:0)
我知道这是一个漫长的方式,但这对我有用。我创建了一个url数组和各自的loc,lastmod,change等。我写了一个函数将XML呈现为一个字符串
function renderXML($array) {
$response = '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
foreach ($array as $item) {
$response .= '<url>
<loc>' . url('/') . '/' . $item['uri'] . '</loc>' .
'<lastmod>'. $item['publishes_at'] . '</lastmod>' .
'<changefreq>'. $item['changefreq'] .'</changefreq>' .
'<priority>' .$item['priority'] . '</priority>' .
'</url>';
}
$response .='</urlset>';
return $response;
}
然后从控制器
调用它return response(self::renderXML($array))->withHeaders(['Content-Type' => 'text/xml']);
这假设您的链接存储在数据库中或像博客等动态生成。这也适用于sitemapindex但结构不同。我们的网站只有6000个链接。我有兴趣知道在不使用tp的情况下更好的方法。