vendor/terminal42/contao-node/src/NodeManager.php line 75

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * Node Bundle for Contao Open Source CMS.
  5.  *
  6.  * @copyright  Copyright (c) 2019, terminal42 gmbh
  7.  * @author     terminal42 <https://terminal42.ch>
  8.  * @license    MIT
  9.  */
  10. namespace Terminal42\NodeBundle;
  11. use Contao\ContentModel;
  12. use Contao\Controller;
  13. use Contao\FrontendTemplate;
  14. use Contao\StringUtil;
  15. use Terminal42\NodeBundle\Model\NodeModel;
  16. class NodeManager
  17. {
  18.     /**
  19.      * Generate single node.
  20.      */
  21.     public function generateSingle(int $id): ?string
  22.     {
  23.         if (!$id) {
  24.             return null;
  25.         }
  26.         if (null === ($nodeModel NodeModel::findOneBy(['id=?''type=?'], [$idNodeModel::TYPE_CONTENT]))) {
  27.             return null;
  28.         }
  29.         return $this->generateBuffer($nodeModel);
  30.     }
  31.     /**
  32.      * Generate multiple nodes.
  33.      */
  34.     public function generateMultiple(array $ids): array
  35.     {
  36.         $ids array_filter($ids);
  37.         if (=== \count($ids)) {
  38.             return [];
  39.         }
  40.         $nodeModels NodeModel::findBy(
  41.             ['id IN ('.implode(','$ids).')''type=?'],
  42.             [NodeModel::TYPE_CONTENTimplode(','$ids)],
  43.             ['order' => 'FIND_IN_SET(`id`, ?)']
  44.         );
  45.         if (null === $nodeModels) {
  46.             return [];
  47.         }
  48.         $nodes = [];
  49.         /** @var NodeModel $nodeModel */
  50.         foreach ($nodeModels as $nodeModel) {
  51.             $nodes[$nodeModel->id] = $this->generateBuffer($nodeModel);
  52.         }
  53.         return array_filter($nodes, static function ($buffer) {
  54.             return null !== $buffer;
  55.         });
  56.     }
  57.     /**
  58.      * Generate the node buffer (content elements).
  59.      */
  60.     private function generateBuffer(NodeModel $nodeModel): string
  61.     {
  62.         if (!Controller::isVisibleElement($nodeModel)) {
  63.             return '';
  64.         }
  65.         $buffer '';
  66.         $elementsData = [];
  67.         if (null !== ($elements $nodeModel->getContentElements())) {
  68.             /** @var ContentModel $element */
  69.             foreach ($elements as $index => $element) {
  70.                 $elementsData[] = $element->row();
  71.                 $element->nodeElementIndex $index;
  72.                 $buffer .= Controller::getContentElement($element);
  73.             }
  74.         }
  75.         if (!$nodeModel->wrapper) {
  76.             return $buffer;
  77.         }
  78.         $template = new FrontendTemplate($nodeModel->nodeTpl ?: 'node_default');
  79.         $template->setData($nodeModel->row());
  80.         $template->elementsData $elementsData;
  81.         $cssID StringUtil::deserialize($nodeModel->cssIDtrue);
  82.         $template->class = !empty($cssID[1]) ? $cssID[1] : '';
  83.         $template->cssID = !empty($cssID[0]) ? $cssID[0] : '';
  84.         $template->buffer $buffer;
  85.         return $template->parse();
  86.     }
  87. }