php-programmist / yandex-turbo-rss-generator-bundle
Bundle for Sumfony 4-5 for generation RSS feed for Yandex Turbo pages.
Installs: 97
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: ^7.2.5 || 8.*
- doctrine/dbal: ^2.10
- symfony/config: ^4.4 || ^5.0
- symfony/dependency-injection: ^4.4 || ^5.0
- symfony/filesystem: ^4.4 || ^5.0
- symfony/http-kernel: ^4.4 || ^5.0
- symfony/twig-bundle: ^4.4 || ^5.0
- symfony/yaml: ^4.4 || ^5.0
Requires (Dev)
- squizlabs/php_codesniffer: ^3.5
- symfony/framework-bundle: ^4.4 || ^5.0
- symfony/phpunit-bridge: ^4.4 || ^5.0
This package is auto-updated.
Last update: 2024-04-16 14:47:45 UTC
README
This bundle for Sumfony 4-5 provides service witch allow you to generate RSS feed for Yandex Turbo pages.
Installation
composer require php-programmist/yandex-turbo-rss-generator-bundle
Before use follow Configuration section instructions
Configuration
Create file config/packages/yandex_turbo_rss_generator.yaml:
yandex_turbo_rss_generator: yandex_id: 12345678 language: 'ru-RU' date_format: 'Y-m-d\TH:i:sP'
In param yandex_id you need to specify ID of your Yandex.Metrika counter for current site
date_format - is string of date format for PHP function date
Usage
First you need to create class that implements PhpProgrammist\YandexTurboRssGeneratorBundle\Adapters\RssAdapterInterface. That class must implement method getItems, which provides array of RssItem objects. Each RssItem objects corresponds to one turbo-page.
You may want extend PhpProgrammist\YandexTurboRssGeneratorBundle\Adapters\RssBaseAdapter class.
Example of adapter:
//src/Adapter/RssContentAdapter.php namespace App\Adapter; use App\Entity\Content; use PhpProgrammist\YandexTurboRssGeneratorBundle\Adapters\BasePageInterface; use PhpProgrammist\YandexTurboRssGeneratorBundle\Adapters\RssBaseAdapter; use PhpProgrammist\YandexTurboRssGeneratorBundle\RssItem; class RssContentAdapter extends RssBaseAdapter { protected function adapt(array $original_items, BasePageInterface $base_page) { /** @var Content $original_item */ foreach ($original_items as $original_item) { $item = new RssItem( $original_item->getId(), $original_item->getPath(), $original_item->getName(), $original_item->getDate(), $original_item->getText() ); $item->setAllBreadcrumbs('Home',$base_page); $this->addItem($item); } } }
This adapter can transform collection of Content entities ($original_items) to array of RssItem.
Also you need create BasePage object (PhpProgrammist\YandexTurboRssGeneratorBundle\Adapters\BasePage) with information about parent of turbo-pages. You need to specify Title, Description and Path to parent-page
//src/Controller/NewsController.php namespace App\Controller; use PhpProgrammist\YandexTurboRssGeneratorBundle\Adapters\BasePage; use PhpProgrammist\YandexTurboRssGeneratorBundle\YandexTurboRssGenerator; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; class NewsController extends AbstractController { /** * @Route("/news/rss.xml", name="news_rss") */ public function rss(ContentRepository $content_repository) { $items = $content_repository->findAll(); $base_page = new BasePage('News','Channel description','/news/'); $adapter = new RssNewsAdapter($items, $base_page); return $this->rss_generator->render($adapter, $base_page); } }