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 ?>
When a slow registration of a component is detected the plugin will show an admin notice.
Slow registration could be caused by by 2 reasons:
- Dynamic population of params
- Execution of tasks in the components main method., (*10)
If the problem is due to Dynamic population of params there is an easy solution.
Just add the following code as an early abort in the function that generates the dynamic params:, (*11)
if (!$this->shouldGenerateParams()) {
return [];
}
It the code above doesn't help the problem probably is that code is executed in the components main function., (*12)
Less and coffe, assets
Could be handled with with Grunt/gulp or whatever.
See https://github.com/digitalunited/roots for example, (*13)