Friday, May 12, 2023

Magento2 - Get a list of all cms static blocks

Magento2 - Get a list of all cms static blocks
    
        use Magento\Cms\Api\BlockRepositoryInterface;
        use Magento\Framework\Api\SearchCriteriaBuilder;
    
    
    
        declare(strict_types=1);
        namespace Vendor\Modulename\Model\Source\Config;
        
        use Magento\Framework\Data\OptionSourceInterface;
        use Magento\Cms\Api\BlockRepositoryInterface;
        use Magento\Framework\Api\SearchCriteriaBuilder;
        use Magento\Framework\Exception\LocalizedException;
        
        class BlockOptions implements OptionSourceInterface
        {
            /**
             * @var BlockRepositoryInterface
             */
            private $blockRepository;
        
            /**
             * @var SearchCriteriaBuilder
             */
            private $searchCriteriaBuilder;
        
            /**
             * @param BlockRepositoryInterface $blockRepository
             * @param SearchCriteriaBuilder $searchCriteriaBuilder
             */
            public function __construct(
                BlockRepositoryInterface $blockRepository,
                SearchCriteriaBuilder $searchCriteriaBuilder
            )
            {
                $this->blockRepository = $blockRepository;
                $this->searchCriteriaBuilder = $searchCriteriaBuilder;
            }
        
            /**
             * @return array[]
             * @throws LocalizedException
             */
            public function toOptionArray(): array
            {
                $searchCriteria = $this->searchCriteriaBuilder->addFilter('is_active','1' , 'eq')->create();
                $cmsBlocks = $this->blockRepository->getList($searchCriteria)->getItems();
                $array[] = [
                    'value' => 0,
                    'label' => __('No Block')
                ];
                $arrResult = [];
        
                foreach ($cmsBlocks as $block) {
                    $arrResult[] = ['value' => $block->getIdentifier(), 'label' => $block->getTitle()];
                }
        
                return array_merge($array, $arrResult);
            }
        }