PHP code example of fab / vidi-frontend
1. Go to this page and download the library: Download fab/vidi-frontend library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
fab / vidi-frontend example snippets
$tca = [
'grid_frontend' => [
'columns' => [
# The key is totally free here. However we prefix with "__" to distinguish between a "regular" column associated to a field.
'__my_custom_column' => [
'renderers' => array(
'Vendor\MyExt\Grid\MyColumnRenderer',
),
'sorting' => FALSE,
'sortable' => FALSE,
'label' => '',
],
],
],
];
\TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($GLOBALS['TCA']['fe_users'], $tca);
namespace Vendor\MyExt\Grid;
/**
* Class to render a custom output.
*/
class MyColumnRenderer extends Fab\Vidi\Grid\ColumnRendererAbstract {
/**
* Render a publication.
*
* @return string
*/
public function render() {
return $output;
}
$tca = array(
'grid_frontend' => array(
'columns' => array(
# Custom fields for the FE goes here
'title' => [],
),
),
);
$tca = [
'grid_frontend' => [
'facets' => [
new \Vendor\MyExt\Facets\MyCustomFacet(),
],
],
];
\TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($GLOBALS['TCA']['fe_users'], $tca);
namespace Vendor\MyExt\Facets;
use Fab\Vidi\Facet\FacetInterface;
use Fab\Vidi\Facet\StandardFacet;
use Fab\Vidi\Persistence\Matcher;
/**
* Class for configuring a custom Facet item.
*/
class CategoryPublicationFacet implements FacetInterface
{
/**
* @var string
*/
protected $name = '__categories_publications';
/**
* @var string
*/
protected $label = 'Categories';
/**
* @var array
*/
protected $suggestions = [];
/**
* @var string
*/
protected $fieldNameAndPath = 'metadata.categories';
/**
* @var string
*/
protected $dataType;
/**
* @var string
*/
protected $canModifyMatcher = true;
/**
* Constructor of a Generic Facet in Vidi.
*
* @param string $name
* @param string $label
* @param array $suggestions
* @param string $fieldNameAndPath
*/
public function __construct($name = '', $label = '', array $suggestions = [], $fieldNameAndPath = '')
{
}
/**
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @return string
*/
public function getLabel()
{
return $this->label;
}
/**
* @return array
*/
public function getSuggestions()
{
return [1 => 'foo', 2 => 'bar', ];
}
/**
* @return bool
*/
public function hasSuggestions()
{
return true;
}
/**
* @return string
*/
public function getFieldNameAndPath()
{
return $this->fieldNameAndPath;
}
/**
* @param string $dataType
* @return $this
*/
public function setDataType($dataType)
{
$this->dataType = $dataType;
return $this;
}
/**
* @return bool
*/
public function canModifyMatcher()
{
return $this->canModifyMatcher;
}
/**
* @param Matcher $matcher
* @param $value
* @return Matcher
*/
public function modifyMatcher(Matcher $matcher, $value)
{
if (MathUtility::canBeInterpretedAsInteger($value)) {
$matcher->equals('metadata.categories', $value);
} else {
$matcher->like('metadata.categories', $value);
}
return $matcher;
}
/**
* Magic method implementation for retrieving state.
*
* @param array $states
* @return StandardFacet
*/
static public function __set_state($states)
{
return new CategoryPublicationFacet($states['name'], $states['label'], $states['suggestions'], $states['fieldNameAndPath']);
}
}
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\SignalSlot\Dispatcher');
$signalSlotDispatcher->connect(
'Fab\Vidi\Domain\Repository\ContentRepository',
'postProcessConstraintsObject',
'Vendor\Extension\Aspects\ProductsAspect',
'processConstraints',
true
);
namespace Vendor\Extension\Aspects;
use Fab\Vidi\Persistence\Query;
use TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface;
/**
* Class which handle signal slot for Vidi Content controller
*/
class ProductsAspect {
/**
* Post-process the constraints object to respect the file mounts.
*
* @param Query $query
* @param ConstraintInterface|null $constraints
* @param $constraintContainer|null
* @return array
*/
public function processConstraints(Query $query, $constraints, $constraintContainer)
{
if ($this->isFrontendMode() && $query->getType() === 'tt_products') {
$additionalConstraints = $query->logicalAnd(
$query->logicalNot($query->equals('title', '')),
$query->logicalNot($query->equals('image', ''))
);
$constraints = null === $constraints
? $additionalConstraints
: $query->logicalAnd(
$constraints,
$additionalConstraints
);
}
return [$query, $constraints, $constraintContainer];
}
/**
* Returns whether the current mode is Frontend
*
* @return bool
*/
protected function isFrontendMode()
{
return TYPO3_MODE === 'FE';
}
}
$tca = array(
'grid_frontend' => [
'columns' => [
...
],
'actions' => [
\Vendor\MyExt\MassAction\MyAction::class,
]
],
);
\TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($GLOBALS['TCA']['tx_domain_model_foo'], $tca);
namespace Vendor\MyExt\MassAction;
use Fab\VidiFrontend\Service\ContentService;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
/**
* Class MyAction
*/
class MyAction extends AbstractMassAction
{
/**
* @var string
*/
protected $name = 'my_action';
/**
* @return string
*/
public function render()
{
$result = sprintf('<li><a href="%s" class="export-csv" data-format="csv"><i class="fa fa-file-text-o"></i> %s</a></li>',
$this->getMassActionUrl(),
LocalizationUtility::translate('my_action', 'foo')
);
return $result;
}
/**
* Return the name of this action..
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Execute the action.
*
* @param ContentService $contentService
* @return ResultActionInterface
*/
public function execute(ContentService $contentService)
{
$result = new JsonResultAction();
$objects = $contentService->getObjects();
// Make sure we have something to process...
if ((bool)$objects) {
// do something
...
$result->setOuptut('foo')
}
return $result;
}
}
'postVarSets' => [
'_DEFAULT' => [
'content' => [
['GETvar' => 'tx_vidifrontend_pi1[contentElement]'],
['GETvar' => 'tx_vidifrontend_pi1[action]'],
['GETvar' => 'tx_vidifrontend_pi1[content]'],
],
]
],