Возвращен sitemap
This commit is contained in:
parent
28215491ca
commit
ca22c7afd8
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Homepage\HtmlPrettierBundle\HtmlPrettierBundle;
|
use Homepage\HtmlPrettierBundle\HtmlPrettierBundle;
|
||||||
//use Nickpeirson\Sculpin\Bundle\SitemapBundle\SculpinSitemapBundle;
|
use Homepage\SiteMapBundle\SiteMapBundle;
|
||||||
use Sculpin\Bundle\SculpinBundle\HttpKernel\AbstractKernel;
|
use Sculpin\Bundle\SculpinBundle\HttpKernel\AbstractKernel;
|
||||||
|
|
||||||
class SculpinKernel extends AbstractKernel
|
class SculpinKernel extends AbstractKernel
|
||||||
@ -9,7 +9,7 @@ class SculpinKernel extends AbstractKernel
|
|||||||
protected function getAdditionalSculpinBundles(): array
|
protected function getAdditionalSculpinBundles(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
// SculpinSitemapBundle::class,
|
SiteMapBundle::class,
|
||||||
HtmlPrettierBundle::class,
|
HtmlPrettierBundle::class,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,13 @@ class HtmlPrettier implements EventSubscriberInterface
|
|||||||
/** @var \Sculpin\Core\Source\SourceInterface $source */
|
/** @var \Sculpin\Core\Source\SourceInterface $source */
|
||||||
foreach ($sourceSet->allSources() as $source) {
|
foreach ($sourceSet->allSources() as $source) {
|
||||||
$filename = $source->filename();
|
$filename = $source->filename();
|
||||||
if ($this->endsWith($filename, '.md') || $this->endsWith($filename, '.html.twig')) {
|
|
||||||
|
$isSuitable = $filename === 'sitemap.xml'
|
||||||
|
|| $this->endsWith($filename, '.md')
|
||||||
|
|| $this->endsWith($filename, '.html.twig')
|
||||||
|
;
|
||||||
|
|
||||||
|
if ($isSuitable) {
|
||||||
yield $source;
|
yield $source;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Homepage\SiteMapBundle\DependencyInjection;
|
||||||
|
|
||||||
|
use Symfony\Component\Config\FileLocator;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\DependencyInjection\Loader;
|
||||||
|
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||||
|
|
||||||
|
class SiteMapExtension extends Extension
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function load(array $configs, ContainerBuilder $container)
|
||||||
|
{
|
||||||
|
$loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
|
||||||
|
$loader->load('services.xml');
|
||||||
|
}
|
||||||
|
}
|
13
bundle/SiteMapBundle/Resources/config/services.xml
Normal file
13
bundle/SiteMapBundle/Resources/config/services.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<container xmlns="http://symfony.com/schema/dic/services"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
|
||||||
|
|
||||||
|
<services>
|
||||||
|
<service id="sculpin_sitemap.event.sitemap_generator" class="Homepage\SiteMapBundle\SiteMapGenerator" public="true">
|
||||||
|
<tag name="kernel.event_subscriber" />
|
||||||
|
<tag name="sculpin.data_provider" alias="sitemap" />
|
||||||
|
</service>
|
||||||
|
</services>
|
||||||
|
|
||||||
|
</container>
|
9
bundle/SiteMapBundle/SiteMapBundle.php
Normal file
9
bundle/SiteMapBundle/SiteMapBundle.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Homepage\SiteMapBundle;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
|
class SiteMapBundle extends Bundle
|
||||||
|
{
|
||||||
|
}
|
98
bundle/SiteMapBundle/SiteMapGenerator.php
Normal file
98
bundle/SiteMapBundle/SiteMapGenerator.php
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Homepage\SiteMapBundle;
|
||||||
|
|
||||||
|
use Sculpin\Core\DataProvider\DataProviderInterface;
|
||||||
|
use Sculpin\Core\Event\SourceSetEvent;
|
||||||
|
use Sculpin\Core\Sculpin;
|
||||||
|
use Sculpin\Core\Source\SourceSet;
|
||||||
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
|
||||||
|
class SiteMapGenerator implements DataProviderInterface, EventSubscriberInterface
|
||||||
|
{
|
||||||
|
protected $siteMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var SourceSet
|
||||||
|
*/
|
||||||
|
protected $sources;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static function getSubscribedEvents(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
Sculpin::EVENT_BEFORE_RUN => 'saveSourceSet',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Before run.
|
||||||
|
*
|
||||||
|
* @param SourceSetEvent $sourceSetEvent Source Set Event
|
||||||
|
*/
|
||||||
|
public function saveSourceSet(SourceSetEvent $sourceSetEvent)
|
||||||
|
{
|
||||||
|
$this->sources = $sourceSetEvent->sourceSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function buildSiteMap()
|
||||||
|
{
|
||||||
|
if (!empty($this->siteMap)) {
|
||||||
|
return $this->siteMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
$siteMap = [];
|
||||||
|
|
||||||
|
/** @var \Sculpin\Core\Source\FileSource $source */
|
||||||
|
foreach ($this->sources->allSources() as $source) {
|
||||||
|
$data = $source->data()->export();
|
||||||
|
|
||||||
|
if (empty($data) || $source->useFileReference()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$siteMapData = $data['sitemap'] ?? [];
|
||||||
|
|
||||||
|
if (isset($siteMapData['_exclude'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$loc = $data['canonical'] ?? $data['url'];
|
||||||
|
|
||||||
|
if (is_callable([$source, 'file'])) {
|
||||||
|
$lastmod = date(DATE_W3C, $source->file()->getMTime());
|
||||||
|
} else {
|
||||||
|
$lastmod = date(DATE_W3C);
|
||||||
|
}
|
||||||
|
|
||||||
|
$url = [
|
||||||
|
'loc' => $loc,
|
||||||
|
'lastmod' => $lastmod,
|
||||||
|
];
|
||||||
|
|
||||||
|
if (isset($data['sitemap'])) {
|
||||||
|
$url = array_merge($url, $data['sitemap']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$siteMap[$url['loc']] = $url;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->siteMap = $siteMap;
|
||||||
|
|
||||||
|
return $this->siteMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide data.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function provideData(): array
|
||||||
|
{
|
||||||
|
$this->buildSiteMap();
|
||||||
|
|
||||||
|
return $this->siteMap;
|
||||||
|
}
|
||||||
|
}
|
@ -11,7 +11,7 @@ sitemap:
|
|||||||
<url>
|
<url>
|
||||||
|
|
||||||
{# Last slash for pretty url #}
|
{# Last slash for pretty url #}
|
||||||
<loc>{{ site.url }}{{ url.loc != '/.' ? (url.loc ~ '/') : '' }}</loc>
|
<loc>{{ site.url }}{{ url.loc != '/.' ? (url.loc|trim('/', side='right') ~ '/') : '' }}</loc>
|
||||||
|
|
||||||
<lastmod>{{ url.lastmod }}</lastmod>
|
<lastmod>{{ url.lastmod }}</lastmod>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user