Elementy jsou speciální widgety, které se dají editovat přímo na frontendu a slouží jako konfigurovatelné miniaplikace. Elementem můžou být ankety, editovatelné pole a podobně.
Obdobně jako u typů stránek se zde vyskytuje tzv. rozšířená entita (ExtendedElementEntity
), která obsahuje společnou entitu (ElementEntity
) společnou pro všechny elementy.
Rozšířená entita může vypadat následovně:
use CmsModule\Content\Elements\ExtendedElementEntity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="\DoctrineModule\Repositories\BaseRepository")
* @ORM\Table(name="textElement")
*/
class TextEntity extends ExtendedElementEntity
{
/**
* @ORM\Column(type="text")
*/
protected $text = '';
public function setText($text)
{
$this->text = $text;
}
public function getText()
{
return $this->text;
}
}
Komponenta je potomkem třídy CmsModule\Content\Elements\BaseElement
. Jednoduchá ukázka:
use CmsModule\Content\Elements\BaseElement;
class TextElement extends BaseElement
{
public function renderDefault()
{
echo 'Hello world!!';
}
public function renderSetup()
{
echo 'There is nothing to configure.';
}
}
renderDefault()
- volá se při renderování elementu na frontendrenderSetup()
- volá se při renderování nastavení elementu.
factories:
foo.barElement:
class: FooModule\Elements\BarElement
tags: [element: foo]
{element foo panel}
{element foo 10}
{element foo:setup}