Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Widget Bundle Laravel Package

evgeniy-it/widget-bundle

Widget Bundle brings MODX-style shortcodes to your CMS, parsing nested [[widget? &option=value]] tags through a Twig filter. Includes simple template-based widgets, Doctrine repository widgets, array settings, and nesting.

View on GitHub
Deep Wiki
Context7

Widget Bundle

Widget bundle is something similar to modx snippets, makes your content managment system powerful.

Installation

With composer:

composer require evgeniy-it/widget-bundle

Widget will be ready to work

Getting started

Render widget via such a shortcode:

[[widget_name? &setting=`1` &settingArray=`[1,2,3]` &settingAssocArray=`{'item1':'value1','item2':'value2'}`]] 

Widget also can be nested multiple times:

[[widget_name? &nestedSetting=`[[widget_name2? &setting1=`value1` &setting2=`[[widget3]]`]]`]]

For parsing and rendering use twig widget filter, it will find all widgets, parse and process them:

{{ some_string_var|widget}}

Be sure about widget syntax:

  • widget name must be ended with ?
  • any option must start with &
  • any option value must be wrapped in `
  • a widget must be started with [[ and ends with ]]

#Using:

##Default widgets:

Simple widget

This widget just renders setting variables into specified template. If template is not specified it will render only option &content. You can specify template as well. Specify template whether as a link or as a string..

#####Example:

Using default template:

{{ '[[simple? &content=`Hello world`]]'|widget }}

or nested

{{ '[[simple? &content=`[[simple? &content=`Hello world`]]`]]'|widget }}

Will output:

Hello world

Using custom template:

{{ '[[simple? &setting1=`value1` &setting2=`value2` &setting3=`value3` &template=`{{setting1}} - {{setting2}} - {{setting3}}`]]'|widget }}

or

{{ '[[simple? &setting1=`value1` &setting2=`value2` &setting3=`value3` &template=`AppBundle:Widget:simple.html.twig`]]'|widget }}
{# AppBundle:Widget:simple.html.twig#}
{{setting1}} - {{setting2}} - {{setting3}}

Will output:

value1 - value2 - value3

Repository widget

Renders collection of doctrine models

Params:

  • tpl - one item element template
  • model - entity model class
  • function - function that will be called
  • args - function args. json format

other params:

  • beforeTpl - contents piece of code that is being shown before item code structure
  • afterTpl - contents piece of code that is being shown after item code structure

in the specified template will be available those vars:

  • item - fetched entity model
  • idx (int) - ordinal Number
  • isFirst (bool) - if the element is the first
  • isLast (bool) - if it's the last element

Example:

<?php

namespace App\Bundle\ProductBundle\Entity;


class Product
{
    /**
     * @var string
     *
     * @ORM\Column(type="string", nullable=true)
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(type="string", nullable=true)
     */
    private $slug;

    /**
     * @var bool
     *
     * @ORM\Column(type="boolean")
     */
    private $active = false;

    /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="App\Bundle\ShopBundle\Entity\ProductCategory", mappedBy="product", cascade={"persist"})
     */
    private $categories;
//...

{{ '[[repository? &model=`AppProductBundle:Product` &function=`findBySlug` &args=`["testslug"]` &tpl=`{{item.name}}` &tpl=`{{idx+1}}. {{item.name}}<br/>`]]'|widget }}

will output:

1. product 1
2. product 3
3. product 3
...
n. product n
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator