Skip to content

Latest commit

 

History

History
227 lines (151 loc) · 4.03 KB

widget.md

File metadata and controls

227 lines (151 loc) · 4.03 KB
title
Laravel 5 Widget

Laravel 5 Widget

Installation

Open your composer.json file and add the new required package.

    "pingpong/widget" : "~2.1"

Next, open your terminal and run composer update.

After composer updated, add new service provider in config/app.php :

    'Pingpong\Widget\WidgetServiceProvider',

And add facade in the same file

    'Widget' => 'Pingpong\Widget\WidgetFacade'

Done.

What's New!

Subscribe widget: It's a new way to register widget using a specified class. For example:

Widget::subscribe('WidgetSubscriber');

class WidgetSubscriber {

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

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

You can also specified which method to handle subscriber of widget.

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

class WidgetSubscriber {

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

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

Registering A Widget

By default you can register a widget in app/widgets.php, that file will autoload automatically.

Via Closure.

// 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();
});

Via Class Name.

By default will call register method.

class MyWidget {

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

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

}

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

Via Class Name with the specified method.

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');

Calling A Widget

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');

On view you can call like this.

@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'));

Grouping A Widget

It is very easy to group widget. you only need to specify the group name and specify an array of the names of the widgets that will be grouped.

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

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

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

To call a group of widgets is the same as calling the widget.

Widget::sidebar();

If you want to send parameters to the widget that is in the group, you can call it like this.

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

On view you can call a group of widgets is same as calling the widget.

@sidebar()

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