DEPRECATION WARNING
This documentation is not using the current rendering mechanism and is probably outdated. The extension maintainer should switch to the new system. Details on how to use the rendering mechanism can be found here.
For Developers¶
Implement your own processors¶
To implement your own processors you just have to implement the Portrino\PxSemantic\Processor\ProcessorInterface
.
You will get the entity as call by reference parameter. The type of the entity is defined in TypoScript as described in
the "For Administrator" section.
Example - RatingProcessor¶
This example illustrates how we could implement our own processor to embed structured data with information about the rating of the current page. We assume that you have installed and configured the th_rating extension.
PHP:¶
/**
* Class RatingProcessor
*
* @package Vendor\ExtensionName\Processor
*/
class RatingProcessor implements \Portrino\PxSemantic\Processor\ProcessorInterface {
/**
* @var \Vendor\ExtensionName\Domain\Model\Page
*/
protected $currentPage;
/**
* @var int
*/
protected $currentPageUid;
/**
* @var \Vendor\ExtensionName\Domain\Repository\PageRepository
* @inject
*/
protected $pageRepository;
/**
* @var \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
*/
protected $typoScriptFrontendController;
/**
* @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
* @inject
*/
protected $objectManager;
/**
* @var \Thucke\ThRating\Domain\Repository\RatingobjectRepository
* @inject
*/
protected $ratingobjectRepository;
/**
* @var \Thucke\ThRating\Domain\Repository\RatingRepository
* @inject
*/
protected $ratingRepository;
/**
* Initializes the controller before invoking an action method.
*
* Override this method to solve tasks which all actions have in
* common.
*
* @return void
*/
public function initializeObject() {
if (TYPO3_MODE === 'FE') {
$this->typoScriptFrontendController = $GLOBALS['TSFE'];
$this->currentPageUid = $this->typoScriptFrontendController->id;
$this->currentPage = $this->pageRepository->findByUid($this->currentPageUid);
}
}
/**
* @param \TYPO3\CMS\Extbase\DomainObject\AbstractEntity $entity
* @param array $settings
*/
public function process(&$entity, $settings = array()) {
if ($entity instanceof \Portrino\PxSemantic\SchemaOrg\CreativeWork) {
if ($this->currentPage) {
/** @var \Thucke\ThRating\Domain\Model\Ratingobject $ratingObject */
$ratingObject = $this->ratingobjectRepository->findByUid($settings['ratingObjectUid']);
if ($ratingObject) {
/** @var \Portrino\PxSemantic\SchemaOrg\AggregateRating $aggregateRating */
$aggregateRating = $this->objectManager->get('Portrino\\PxSemantic\\SchemaOrg\\AggregateRating');
$stepConfs = $ratingObject->getStepconfs();
$stepWeights = array();
/** @var \Thucke\ThRating\Domain\Model\Stepconf $stepConf */
foreach ($stepConfs as $stepConf) {
$stepWeights[] = $stepConf->getStepweight();
}
$worstRating = min($stepWeights);
$bestRating = array_sum($stepWeights);
$aggregateRating->setWorstRating($worstRating);
$aggregateRating->setBestRating($bestRating);
/** @var \Thucke\ThRating\Domain\Model\Rating $rating */
$rating = $this->ratingRepository->findMatchingObjectAndUid($ratingObject, $this->currentPageUid);
if ($rating) {
$currentRates = $rating->getCurrentrates();
if ($currentRates) {
$aggregateRating->setRatingCount($currentRates['numAllVotes']);
$aggregateRating->setRatingValue($currentRates['currentrate']);
if ((int)$aggregateRating->getRatingCount() > 0 && (int)$aggregateRating->getRatingValue() > 0) {
$entity->setAggregateRating($aggregateRating);
}
}
}
}
}
}
}
}
TypoScript:¶
Configure structuredDataMarkupRating
plugin in your TypoScript setup.
lib.structuredDataMarkupRating < lib.structuredDataMarkup
lib.structuredDataMarkupRating {
settings {
entity = Portrino\PxSemantic\SchemaOrg\CreativeWork
processors {
# sets the rating specific values
0 {
className = Portrino\SiteAssets\Processor\RatingProcessor
settings {
ratingObjectUid = 1
}
}
}
}
}
Include plugin somewhere in your document:
page.headerData.1453734423 < lib.structuredDataMarkupRating