Search code examples
typo3typo3-7.6.xtx-news

TYPO3 & tx_news need ViewHelper for show count of Entities in category


Task: in category menu show count of item in each category, like

  • Category_one (38)
  • Category_two (14)
  • Etc ...

I have try count by $demand but did'nt work

<?php
    namespace HIT\huskytheme\ViewHelpers\News;

    class CountCategoriesViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {

        /**
         * @var \GeorgRinger\News\Domain\Repository\NewsRepository
         * @inject
         */
        protected $newsRepository = null;

        /**
         * 
         * @param string $category
         * @return string
         */
        public function render($category) {

            $demand = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('GeorgRinger\\News\\Domain\\Model\\Dto\\NewsDemand');
            //$demand->setDateField('datetime');

            $demand->setStoragePage(10, true);

            // for example by id = 2
            $demand->setCategories(2);

            $demand->setCategoryConjunction('and');
            $demand->setIncludeSubCategories('1');
            //$demand->setArchiveRestriction($settings['archiveRestriction']);

            $statistics = $this->newsRepository->countByCategories($demand);
            \TYPO3\CMS\Core\Utility\DebugUtility::debug($statistics);

            return $this->newsRepository->countByCategories($demand); 

        }

    }

But get just 0, if call

{namespace s=HIT\huskytheme\ViewHelpers} 
{s:news.countCategories(category: 2)}

Solution

  • Actualy i found way to get number of news in Category. Thx Georg Ringer and undko

    My ViewHelper

    <?php
    
    namespace HIT\huskytheme\ViewHelpers\News;
    
    class CountCategoriesViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
    
        /**
         * @var \GeorgRinger\News\Domain\Repository\NewsRepository
         * @inject
         */
        protected $newsRepository = null;
    
    
        /**
         * 
         * @param \GeorgRinger\News\Domain\Model\Category $category
         * @return string
         */
        public function render($category) {
            /* @var $demand \GeorgRinger\News\Domain\Model\Dto\NewsDemand */
            $demand = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\GeorgRinger\News\Domain\Model\Dto\NewsDemand::class);
    
            $demand->setCategories(array($category));
            $demand->setCategoryConjunction('and');
            $demand->setIncludeSubCategories(false);
    
            return count($this->newsRepository->findDemanded($demand));
        }
    }
    

    And in my tx_news Templates/Category/List.html

    <!-- load my ViewHelper -->
    {namespace s=HIT\huskytheme\ViewHelpers} 
    

    and here add count

    ...
                                <f:link.page title="{category.item.title}" class="current-item" pageUid="{settings.listPid}"
                                             additionalParams="{tx_news_pi1:{overwriteDemand:{categories: category.item.uid}}}">{category.item.title}
                                    <span class="postnum">({s:news.countCategories(category: category.item)})</span>
                                </f:link.page>
    ...