cvepdb/laravel-widgets

此包已被废弃,不再维护。作者建议使用cvepdb/laravel-widgets包代替。

laravel框架的简单小部件系统

此包尚未发布版本,可用的信息不多。


README

Build Status

http://laravel5pingpong.blogspot.fr/2016/08/widget_18.html

安装

打开您的composer.json文件,并添加新的必需包。

"cvepdb/laravel-widget" : "~2.3"

接下来,打开您的终端并运行composer update。composer更新后,在config/app.php中添加新的服务提供者

'CVEPDB\Widgets\App\Providers\WidgetsServiceProvider',

并在同一文件中添加外观

'Widget' => 'CVEPDB\Widgets\App\Facades\WidgetsFacade'

完成。

更新内容!

订阅小部件:这是一种使用指定类注册小部件的新方法。例如:Widget::subscribe('WidgetSubscriber');

class WidgetSubscriber {

    public function subscribe($widget)
    {
        $widget->register('image', __CLASS__ .'@image');
    }

    public function image()
    {
        return 'Your handler here';
    }
}

您还可以指定要处理小部件订阅者的哪个方法。

Widget::subscribe('WidgetSubscriber@handle');

class WidgetSubscriber {

    public function handle($widget)
    {
        $widget->register('image', __CLASS__ .'@image');
    }

    public function image()
    {
        return 'Your handler here';
    }
}

注册小部件

默认情况下,您可以在app/widgets.php中注册小部件,该文件将自动加载。通过闭包。

app/widgets.php

Widget::register('small', function($contents)
{
    return "<small>{$contents}</small>";
});

Widget::register('view', function($view, $data = array(), $mergeData = array()
{
    return View::make($view, $data, $mergeData)->render();
});

通过类名

默认情况下将调用register方法。

class MyWidget {

    public function register($contents, $attributes = array())
    {
        $attributes = HTML::attributes($attributes);

        return "<h1{$attributes}>{$contents}</h1>";
    }

} 

Widget::register('h1', 'MyWidget');

通过具有指定方法的类名

class TagCreator {

    public function create($tag, $contents, $attributes = array())
    {
        $attributes = HTML::attributes($attributes);

        return "<{$tag}{$attributes}>{$contents}</{$tag}>";
    }

} 

class HTMLWidget {

    protected $tag;

    public function __construct(TagCreator $tag)
    {
        $this->tag = $tag;
    }

    public function p($contents, $attributes = array())
    {
        return $this->tag->create('p', $contents, $attributes);
    }

    public function div($contents, $attributes = array())
    {
        return $this->tag->create('div', $contents, $attributes);
    }
}

Widget::register('p', 'HTMLWidget@p');

Widget::register('div', 'HTMLWidget@div');

调用小部件

Widget::get('small', array('My Content'));

Widget::call('small', array('My Content'));

Widget::small('My Content');

Widget::p('My Content');

Widget::div('My Content');

Widget::h1('My Content');

在视图中,您可以这样调用。

@small('My Content')

@view('users.show', $data, $mergeData)

@h1('Welcome!')

@p('Hello World', array('class' => 'page-header'));

@div('Lorem ipsum', array('class' => 'alert alert-warning'));

分组小部件

分组小部件非常简单。您只需指定组名,并指定将分组的小部件名称数组。

Widget::register('calendar', 'SidebarWidget@calendar')

Widget::register('archive', 'SidebarWidget@archive')

Widget::group('sidebar', array('calendar', 'archive'));

调用一组小部件与调用小部件相同。

Widget::sidebar();

如果您想向组内的小部件发送参数,可以像这样调用。

Widget::sidebar(
    array('your-first-param', 'your-second-param'),
    array('first-param-for-second-widget', 'the-second')
);

在视图中,调用一组小部件与调用小部件相同。

@sidebar()

@sidebar(array('first-param'), array('first-param-for-second-widget'))