mirion / yandex-turbo
此包已废弃且不再维护。未建议替代包。
用于处理「Yandex.Turbo」服务的包。
1.1.0
2020-03-24 21:16 UTC
Requires
- php: ^7.4
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2021-10-26 23:24:44 UTC
README
安装
使用Composer安装
$ composer require mireon/yandex-turbo
编码
流式接口
所有创建类的示例均使用流式接口,但您也可以使用经典样式。
<?php use Mireon\YandexTurbo\Channels\Articles\Articles; // Fluent interface. Articles::create() ->title('Название канала') ->description('Краткое описание канала') ->link('http://www.example.com/') ->language('ru'); // Classic style. $channel = new Articles(); $channel->setTitle('Название канала'); $channel->setDescription('Краткое описание канала'); $channel->setLink('http://www.example.com/'); $channel->setLanguage('ru');
工厂方法
几乎每个类都有3个工厂方法
Class:create()
- 通过将参数传递给构造函数来创建类的实例。Class:createFromArray()
- 创建类的实例并赋予属性值。参数为一个关联数组,其中键是类的属性名,值是对应的值。Class:createFromClosure()
- 创建类的实例并应用作为参数传递的函数。该函数接收新创建的类的实例。
<?php use Mireon\YandexTurbo\Channels\Articles\Analytic\Yandex\Yandex; Yandex::create('id', 'params'); Yandex::createFromArray([ 'id' => '123456', 'params' => "{ 'time' : 'now()' }", ]); Yandex::createFromClosure(function (Yandex $yandex) { $yandex->id('123456'); $yandex->params("{ 'time' : 'now()' }"); });
创建频道
基本信息
<?php use Mireon\YandexTurbo\Channels\Articles\Articles; Articles::create() ->title('Название канала') ->description('Краткое описание канала') ->link('http://www.example.com/') ->language('ru');
广告块
可以通过两种方式添加广告块
- 使用方法
Articles::ad()
添加单个实例。参数是一个实现了AdInterface
接口的类的实例。 - 使用方法
Articles::ads()
添加一组实例。参数是一个实现了AdsInterface
接口的类的实例。
<?php use Mireon\YandexTurbo\Channels\Articles\Articles; use Mireon\YandexTurbo\Channels\Articles\Ad\Ads; use Mireon\YandexTurbo\Channels\Articles\Ad\YandexAdNetwork\YandexAdNetwork; use Mireon\YandexTurbo\Channels\Articles\Ad\AdFox\AdFox; Articles::create() ->ad(YandexAdNetwork::create('id', 'turbo-ad-id')) ->ad(AdFox::create('turbo-ad-id', 'content')); Articles::create() ->ads(Ads::create([ YandexAdNetwork::create('id', 'turbo-ad-id'), AdFox::create('turbo-ad-id', 'content'), ]));
分析系统
可以通过两种方式添加分析系统
- 使用方法
Articles::analytic()
添加单个实例。参数是一个实现了AnalyticInterface
接口的类的实例。 - 使用方法
Articles::analytics()
添加一组实例。参数是一个实现了AnalyticsInterface
接口的类的实例。
<?php use Mireon\YandexTurbo\Channels\Articles\Articles; use Mireon\YandexTurbo\Channels\Articles\Analytic\Custom\Custom; use Mireon\YandexTurbo\Channels\Articles\Analytic\Google\Google; use Mireon\YandexTurbo\Channels\Articles\Analytic\LiveInternet\LiveInternet; use Mireon\YandexTurbo\Channels\Articles\Analytic\MailRu\MailRu; use Mireon\YandexTurbo\Channels\Articles\Analytic\Mediascope\Mediascope; use Mireon\YandexTurbo\Channels\Articles\Analytic\Rambler\Rambler; use Mireon\YandexTurbo\Channels\Articles\Analytic\Yandex\Yandex; Articles::create() ->analytic(Custom::create('url')) ->analytic(Google::create('id')) ->analytic(LiveInternet::create('params')) ->analytic(MailRu::create('id')) ->analytic(Mediascope::create('id')) ->analytic(Rambler::create('id')) ->analytic(Yandex::create('id', 'params')); Articles::create() ->analytics(Analytics::create([ Custom::create('url'), Google::create('id'), LiveInternet::create('params'), MailRu::create('id'), Mediascope::create('id'), Rambler::create('id'), Yandex::create('id', 'params'), ]));
添加文章信息
可以以两种方式添加包含文章信息的元素
- 使用方法
Articles::item()
添加单个实例。参数是一个实现了ItemInterface
接口的类的实例。 - 使用方法
Articles::items()
添加一组实例。参数是一个实现了ItemsInterface
接口的类的实例。
<?php use Mireon\YandexTurbo\Channels\Articles\Articles; use Mireon\YandexTurbo\Channels\Articles\Item\Item; use Mireon\YandexTurbo\Channels\Articles\Item\Items; Articles::create() ->item(Item::create('link', 'content')) ->item(Item::create('link', 'content')) ->item(Item::create('link', 'content')); Articles::create() ->items(Items::create([ Item::create('link', 'content'), Item::create('link', 'content'), Item::create('link', 'content'), ])); Articles::create() ->items(Items::createFromClosure(function (Items $items) { Item::create('link', 'content')->appendTo($items); Item::create('link', 'content')->appendTo($items); Item::create('link', 'content')->appendTo($items); }));
文章信息
除了文章的基本数据,如作者
或链接
外,还应关注方法Item::relatedLinks
。此方法添加指向其他资源的链接。在RSS流中,链接以<yandex:related type="infinity"></yandex:related>
和<yandex:related></yandex:related>
标签输出。更多详情请参考RSS流标记。
页面内容传递给方法Item::content()
。为此,请使用类Content
,如下例所示。此类的主要元素是块。关于块的更多详情将在下面介绍。
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Item; use Mireon\YandexTurbo\Channels\Articles\Item\Metrics\Metrics; use Mireon\YandexTurbo\Channels\Articles\Item\Metrics\Yandex\Breadcrumb; use Mireon\YandexTurbo\Channels\Articles\Item\Metrics\Yandex\Yandex; use Mireon\YandexTurbo\Channels\Articles\Item\RelatedLinks\RelatedLinks; use Mireon\YandexTurbo\Channels\Articles\Item\RelatedLinks\Infinity\Link as InfinityLink; use Mireon\YandexTurbo\Channels\Articles\Item\RelatedLinks\External\Link as ExternalLink; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Content; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Header\Header; Item::create() ->turbo(true) ->link('url') ->source('url') ->topic('topic') ->pubDate('date') ->author('author') ->metrics(Metrics::create() ->metric(Yandex::create() ->id('123456') ->breadcrumb(Breadcrumb::create('text', 'url')) ->breadcrumb(Breadcrumb::create('text', 'url')) ) ) ->relatedLinks(RelatedLinks::create() ->link(InfinityLink::create('url')) ->link(ExternalLink::create('text', 'url', 'url')) ) ->content(Content::create() ->block(Header::create()->title('title')->preview('url')) ->html('<div>Text</div>') );
文章内容的块
所有块都放置在内容部分元素中。
“页眉”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Header\Header; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Header\Menu\Menu; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Header\Menu\Link as MenuLink; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Header\Breadcrumbs\Breadcrumbs; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Header\Breadcrumbs\Link as BreadcrumbsLink; Header::create() ->title('text') ->subTitle('text') ->preview('url') ->menu(Menu::create() ->link(MenuLink::create('text', 'url')) ->link(MenuLink::create('text', 'url')) ->link(MenuLink::create('text', 'url')) ) ->breadcrumbs(Breadcrumbs::create() ->link(BreadcrumbsLink::create('text', 'url')) ->link(BreadcrumbsLink::create('text', 'url')) ->link(BreadcrumbsLink::create('text', 'url')) );
“手风琴”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Accordion\Accordion; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Accordion\Item; Accordion::create() ->item(Item::create('title', 'content')) ->item(Item::create('title', 'content')) ->item(Item::create('title', 'content'));
“音频”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Audio\Audio; Audio::create()->src('url');
“幻灯片”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Slider\Slider; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Slider\Ad\Ad; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Slider\Image\Image; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Slider\Video\Video; Slider::create() ->view(Slider::VIEW_LANDSCAPE) ->header('text') ->item(Ad::create()->turboAdId('turbo-ad-id')) ->item(Image::create()->image('url')->caption('text')) ->item(Video::create() ->width(400) ->height(200) ->source('url') ->type('mp4') ->duration(5) ->title('text') ->preview('url') ->caption('text') );
具有垂直滚动的“卡片”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Cards\Cards; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Cards\Item; Cards::create() ->item(Item::create() ->headerImage('url') ->headerTitle('text') ->content('text') ->footerUrl('url') ->footerText('text') ->moreUrl('url') ->moreText('text') );
具有水平滚动的“卡片”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Carousel\Carousel; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Carousel\Item; Carousel::create() ->header('text') ->item(Item::create()->title('text')->image('url')->url('url'));
“继续阅读”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Fold\Fold; use Mireon\YandexTurbo\Converter\StripTags; Fold::create()->content('text')->converters([StripTags::class]);
“也阅读”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Feed\Feed; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Feed\Item; Feed::create() ->layout(Feed::LAYOUT_VERTICAL) ->title('text') ->item(Item::create() ->title('text') ->description('text') ->href('url') ->thumb('url') ->thumbPosition(Item::POSITION_RIGHT) ->thumbRatio(Item::RATIO_4x3) );
内容中的广告块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Ad\AdInContent; AdInContent::create()->turboAdId('id')->mobile(true)->desktop(true);
“InPage”广告块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Ad\AdInPage; AdInPage::create()->turboAdId('id')->turboInPageAdId('id');
“按钮”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Button\Button; Button::create() ->formaction('action') ->text('text') ->background('color') ->color('color') ->turbo(true) ->primary(false) ->disabled(false);
“搜索”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Search\Search; Search::create()->action('action')->name('name')->placeholder('text');
“评级”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Rating\Rating; Rating::create()->value(5)->best(10);
“反馈”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Feedback\Feedback; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Feedback\Item; Feedback::create() ->title('text') ->stick(Feedback::STICK_RIGHT) ->item(Item::create() ->type(Item::TYPE_CALLBACK) ->url('url') ->sendTo('email') ->agreementCompany('company') ->agreementLink('url') );
“分享”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Share\Share; Share::create() ->network(Share::NETWORK_FACEBOOK) ->network(Share::NETWORK_ODNOKLASSNIKI) ->network(Share::NETWORK_TELEGRAM) ->network(Share::NETWORK_TWITTER) ->network(Share::NETWORK_VKONTAKTE);
“评论”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Comments\Comments; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Comments\Comment; Comments::create() ->url('url') ->item(Comment::create() ->author('text') ->subTitle('text') ->header('text') ->content('text') ->avatar('url') );
“反馈”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Callback\Callback; Callback::create() ->sendTo('email') ->agreement('company', 'url');
“动态表单”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\DynamicForm\DynamicForm; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\DynamicForm\Checkbox\Checkbox; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\DynamicForm\Input\Input; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\DynamicForm\Radio\Radio; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\DynamicForm\Radio\Option as RadioOption; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\DynamicForm\Select\Select; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\DynamicForm\Select\Option as SelectOption; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\DynamicForm\Textarea\Textarea; DynamicForm::create() ->endPoint('url') ->item(Checkbox::create() ->name('text') ->value('text') ->content('text') ) ->item(Input::create() ->type(Input::TYPE_TEXT) ->name('text') ->label('text') ->placeholder('text') ->required(true) ) ->item(Radio::create() ->name('text') ->label('text') ->option(RadioOption::create()->label('text')->value('text')->meta('text')->checked(true)) ->option(RadioOption::create()->label('text')->value('text')->meta('text')) ->option(RadioOption::create()->label('text')->value('text')->meta('text')) ) ->item(Select::create() ->name('text') ->label('text') ->value('text') ->option(SelectOption::create()->text('text')->value('text')) ->option(SelectOption::create()->text('text')->value('text')) ->option(SelectOption::create()->text('text')->value('text')) ) ->item(Textarea::create() ->name(Input::TYPE_TEXT) ->label('text') ->placeholder('text') ->required('text') );
“直方图”块
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Histogram\Histogram; use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Histogram\Item; Histogram::create() ->item(Item::create() ->title('text') ->value(10) ->height(50) ->icon('url') ->color('color') );
HTML标记块
块接受任何字符串数据。可以对此字符串应用处理器。例如,处理器StripTag
删除所有标签。通过实现接口ConverterInterface
创建自己的处理器。
<?php use Mireon\YandexTurbo\Channels\Articles\Item\Content\Blocks\Html\Html; use Mireon\YandexTurbo\Converter\StripTags; use Mireon\YandexTurbo\Converter\WrapP; Html::create() ->html('<div>Hello world!</div>') ->converters([StripTags::class, WrapP::class]);
输出频道
方法 Articles::render()
返回一个字符串形式的频道。
<?php use Mireon\YandexTurbo\Channels\Articles\Articles; header('Content-Type: text/xml; charset=utf-8'); print Articles::create()->render();
测试
$ composer test
许可证
本包的所有内容均根据 MIT 许可证 许可。