Получить все ссылки на мой сайт laravel для карты сайта

Я создаю карту сайта, но получаю сообщение об ошибке, когда запускаю обновление композитора на своем сервере. этот пакет вызывает ошибку https://github.com/spatie/laravel-sitemap

потому что версия php сервера 7.0, но требования к пакету 7.1.

у них есть какое-либо альтернативное решение для этого, без обновления версии php? или у них есть короткий путь, чтобы получить все ссылки моего сайта? заранее спасибо :)


person Kenneth    schedule 05.12.2017    source источник
comment
Если минимальным требованием проекта является php 7.1, вы не так много можете сделать с этим проектом; по крайней мере, вы можете попробовать разветвить его...   -  person Optiroot    schedule 05.12.2017
comment
spatie laravel 3.3 не требует 7.1   -  person Dhaval Chheda    schedule 05.12.2017
comment
Проблема 1 - для доктрины/инстантиатора 1.1.0 требуется php ^7.1 -> ваша версия PHP (7.0.18) не удовлетворяет этому требованию.   -  person Kenneth    schedule 05.12.2017
comment
@Kenneth, вы также можете попробовать это github.com/prolificrohit/sitemaps   -  person prolific    schedule 19.01.2018


Ответы (2)


вместо этого вы можете использовать этот пакет:

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;
person Mahdi Youseftabar    schedule 05.12.2017

Я знаю, что это долгий путь, но это сработало для меня. Я создал массив 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']);

Это предполагает, что ваши ссылки хранятся в базе данных или генерируются динамически, как блоги и т. д. Это также работает для индекса карты сайта, но с другой структурой. Наш сайт совсем небольшой, всего 6000 ссылок. Мне было бы интересно узнать о лучшем способе сделать это без использования tp.

person Jase Moorcroft    schedule 17.04.2018