mirion/yandex-turbo

此包已废弃且不再维护。未建议替代包。

用于处理「Yandex.Turbo」服务的包。

1.1.0 2020-03-24 21:16 UTC

This package is auto-updated.

Last update: 2021-10-26 23:24:44 UTC


README

PHP Size License Release

安装

使用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个工厂方法

  1. Class:create() - 通过将参数传递给构造函数来创建类的实例。
  2. Class:createFromArray() - 创建类的实例并赋予属性值。参数为一个关联数组,其中键是类的属性名,值是对应的值。
  3. 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');

广告块

可以通过两种方式添加广告块

  1. 使用方法 Articles::ad() 添加单个实例。参数是一个实现了 AdInterface 接口的类的实例。
  2. 使用方法 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'),
    ]));

分析系统

可以通过两种方式添加分析系统

  1. 使用方法 Articles::analytic() 添加单个实例。参数是一个实现了 AnalyticInterface 接口的类的实例。
  2. 使用方法 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'),
    ]));

添加文章信息

可以以两种方式添加包含文章信息的元素

  1. 使用方法 Articles::item() 添加单个实例。参数是一个实现了 ItemInterface 接口的类的实例。
  2. 使用方法 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 许可证 许可。