获取我的laravel网站的所有链接以获取站点地图

时间:2017-12-05 07:31:38

标签: php laravel laravel-5.4 sitemap

我生成站点地图,但是当我在我的服务器中运行编辑器更新时,我得到错误。 此程序包会导致错误https://github.com/spatie/laravel-sitemap

因为服务器的php版本是7.0,但包的要求是7.1。

他们有没有替代解决方案,没有更新PHP版本? 或者他们有一个简短的方法来获取我的网站的所有链接?提前谢谢:)

2 个答案:

答案 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的情况下更好的方法。