Skip to content

Allows to render widgets in page content of Yii2 Framework based projects

Notifications You must be signed in to change notification settings

pointdnd/yii2-inline-widgets-behavior

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 

Repository files navigation

InlineWidgetsBehavior

Allows to render widgets in page content in Yii2 Framework based projects

Install

Either run

$ php composer.phar require --prefer-dist howardEagle/Yii2-inline-widgets-behavior "*"

or add

"howardEagle/Yii2-inline-widgets-behavior": "*"
~~~
to the `require` section of your `composer.json file`.

Usage example
-------------

### Add a allowed widgets list into `config/main.php`:

```php
return array(
    // ...
    'params'=>array(
         // ...
        'runtimeWidgets'=>array(
            'ContactsForm',
            'Comments',
            'common\widgets\LastPosts',
        }
    }
}
```

### Create widgets:

```php
class LastPostsWidget extends Widget
{
    public $tpl = 'default';

    public function run()
    {
        $posts = Post::find()->published()->all();
        echo $this->render('LastPosts/' . $this->tpl, array(
            'posts'=>$posts,
        ));
    }
}
```


### Attach the behavior to a main controller:

```php
use howard\behaviors\iwb\InlineWidgetBehavior;

class DefaultController extends Controller
{
    public function behaviors()
    {
        return array(
            'InlineWidgetsBehavior'=>array(
                'class'=> InlineWidgetBehavior::className(),
                'namespace'=> 'common\components\widgets', // default namespace (optional)               
                'widgets'=>Yii::app()->params['runtimeWidgets'],
                'startBlock'=> '[*',
                'endBlock'=> '*]',
             ),
        );
    }
}
```


### You can define a global classname suffix like 'Widget':

```php
class DefaultController extends Controller
{
    public function behaviors()
    {
        return array(
            'InlineWidgetsBehavior'=>array(
                'class'=> InlineWidgetBehavior::className(),
                'widgets'=>Yii::app()->params['runtimeWidgets'],
                'classSuffix'=> 'Widget',
             ),
        );
    }
}
```

for using short names 'LastPosts' instead of 'LastPostsWidget' :

```php
return array(
    // ...
    'params'=>array(
         // ...
        'runtimeWidgets'=>array(
            'ContactsForm',
            'Comments',
            'common\widgets\LastPosts',
        }
    }
}
```


For insert widgets in content you can use string of this format in your text:
~~~
<startBlock><WidgetName>[|<attribute>=<value>[;<attribute>=<value>]]<endBlock>
~~~

For rendering widgets in any View you must call `Controller::decodeWidgets()` method for model HTML content. 

### For example:

```php
<?php $model->text = '
    <h2>Lorem ipsum</h2>
 
    <h2>Latest posts</h2>
    <p>[*LastPosts*]</p>
 
    <h2>Latest posts (with parameters)</h2>
    <p>[*LastPosts|tpl=small*]</p>
 
    <h2>Latest posts (with inner caching)</h2>
    <p>[*LastPosts|tpl=small;cache=300*]</p>
 
    <p>Dolor...</p>
'; ?>
 
<h1><?php echo CHtml::encode($model->title); ?></h1>
<?php echo $this->context->decodeWidgets($model->text); ?>
```

About

Allows to render widgets in page content of Yii2 Framework based projects

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%