Components
Installation
- Install via composer
- Activate plugin
- Configure grunt
Usage
A component folder should be placed in the theme-directory following this structure:, (*1)
βββ components
βββ SomeComponent
β βββ assets
| | βββ some-jpgs-or-whatever.jpg
β βββ component.php
β βββ one-or-more-less-files.less
β βββ one-or-more-coffee-files.coffee
β βββ view.php
β βββ _somePartialView.view.php
βββ SomeOtherComponent
βββ component.php
βββ one-or-more-less-files.less
βββ one-or-more-coffee-files.coffee
βββ view.php
Every component will have their short-code registered and vc_mapping set up., (*2)
component.php
A VCComponent have the following structure:, (*3)
namespace Component;
class Text extends \DigitalUnited\Components\VcComponent
{
// This is a VC-mapping array
// https://wpbakery.atlassian.net/wiki/pages/viewpage.action?pageId=524332
protected function getComponentConfig()
{
return [
'name' => __('Text', 'components'),
'description' => __('Standard textmodul', 'components'),
'params' => [
[
"type" => "textfield",
"holder" => "div",
"class" => "",
"heading" => __( "Headline", "components" ),
"param_name" => "headline",
"value" => "",
"description" => ""
],
[
"type" => "textarea_html",
"holder" => "div",
"class" => "",
"heading" => __( "Content", "components" ),
"param_name" => "content",
"value" => "",
"description" => ""
],
]
];
}
// If you want to you can have diferent views for deferent cases.
// If you do you can override the following method.
//
// If view is not specified they will be rendered in the following
// order: [view].view.php, view.php
//
// default is __DIR__.'/view.php'
protected function getViewFileName() {
return parent::getViewFileName();
}
// Before the parameters of the components is sent to rendering
// you may modify their values here
protected function sanetizeDataForRendering($data)
{
return $data;
}
// If you want to change what kind of element is rendered
// You could override this method
protected function getWrapperElementType()
{
return 'div';
}
// Add classes to the wrapping element. Should be an array
// If a param named view exists it will be added automaticly
protected function getExtraWrapperClasses()
{
return $this->param('headline') ? ['has-headline'] : ['no-headline'];
}
// Add attribute to the wrapper. if 'class' is specified it will be merged in
// with classes from getExtraWrapperClasses
protected function getWrapperAttributes()
{
return ['href' => 'myhref foobar', 'role' => 'button'];
}
// May be used to implement logic such as post-type registering or whatever
public function main()
{
}
}
?>
A Standard component have the following structure:, (*4)
namespace Component;
class Sidebar extends \DigitalUnited\Components\Component
{
// Return key value pair with the accepted parameters for this
// view file
protected function getDefaultParams() {
return [
'param1' => 'default value1',
'param2' => '',
'view' => 'default',
];
}
//Same as a VcComponent
protected function getViewFileName() { ... }
protected function sanetizeDataForRendering($data) { ... }
public function main() { ... }
}
?>
View
In the views, all values returned from "sanetizeDataForRendering" will be accessible., (*5)
eg. ['foo' => 'bar'] will be available like, (*6)
<?= $foo // outputs 'bar' ?>
You may also use the component class, referenced as $component. eg:, (*7)
<?= $component->myFancyPublicFunction() ?>
You may use separate view files depending on the $view-param, if "view" param is specified, $view.view.php will be rendered. Default: view.php, (*8)
It is possible to split a view file into partials:, (*9)
<?= $component->renderPartial('_listItem') // renders _listItem.view.php ?>
Less and coffe, assets
Could be handled with with Grunt/gulp or whatever.
See https://github.com/digitalunited/roots for example, (*10)