Im currently experiencing a problem. I have a Module, called Vendor_ModName. I am using Magento 2.1.0.
In Block/CustomProductCollection.php im calling
<?php
namespace Vendor\ModName\Block;
class CustomProductCollection extends \Magento\Framework\View\Element\Template
{
protected $_productCollectionFactory;
protected $_categoryFactory;
private $logger;
public function __construct(
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
\Magento\Catalog\Model\CategoryFactory $categoryFactory,
\Magento\Framework\View\Element\Template\Context $context,
\Psr\Logger\LoggerInterface $logger
) {
$this->_categoryFactory = $categoryFactory;
$this->_productCollectionFactory = $productCollectionFactory;
$this->logger = $logger;
parent::__construct($context);
}
public function test(){
try {
return "HELLO WORLD";
} catch (\Exception $e) {
$this->logger->critical($e);
}
}
public function getProductCollection()
{
$collection = $this->_productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->addAttributeToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH);
$collection->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED);
return $collection;
}
}
In the desired phtml in the view/frontend/template
folder I'm using
<?php $test = $block->test(); ?>
<?php echo $test; ?>
<?php $collection = $block->getProductCollection(); ?>
<?php var_dump($collection); ?>
However, the output on the CMS block page is:
Error filtering template: Invalid method Magento\Framework\View\Element\Template::test(Array ( ) )
The question now is, what am I doing wrong here? In my CMS Blog I'm using this to call the specific phtml-File:
<p>{{block class="Magento\Framework\View\Element\Template" template="Vendor_ModName::test-slider.phtml"}}</p>
In the exception.log I have this:
[2016-08-19 03:43:56] main.CRITICAL: Magento\Framework\Exception\LocalizedException: Invalid method Magento\Framework\View\Element\Template::test(Array
(
)
) in /home/user00114/public_html/211/vendor/magento/framework/DataObject.php:396
Stack trace:
#0 /home/user00114/public_html/211/app/code/Vendor/ModName/view/frontend/templates/test-slider.phtml(11): Magento\Framework\DataObject->__call('test', Array)
#1 /home/user00114/public_html/211/vendor/magento/framework/View/TemplateEngine/Php.php(59): include('/home/user00114/...')
#2 /home/user00114/public_html/211/vendor/magento/framework/View/Element/Template.php(255): Magento\Framework\View\TemplateEngine\Php->render(Object(Magento\Framework\View\Element\Template), '/home/user00114/...', Array)
#3 /home/user00114/public_html/211/vendor/magento/framework/View/Element/Template.php(279): Magento\Framework\View\Element\Template->fetchView('/home/user00114/...')
#4 /home/user00114/public_html/211/vendor/magento/framework/View/Element/AbstractBlock.php(657): Magento\Framework\View\Element\Template->_toHtml()
#5 /home/user00114/public_html/211/vendor/magento/module-email/Model/Template/Filter.php(366): Magento\Framework\View\Element\AbstractBlock->toHtml()
#6 [internal function]: Magento\Email\Model\Template\Filter->blockDirective(Array)
#7 /home/user00114/public_html/211/vendor/magento/framework/Filter/Template.php(141): call_user_func(Array, Array)
#8 /home/user00114/public_html/211/vendor/magento/module-email/Model/Template/Filter.php(963): Magento\Framework\Filter\Template->filter('{{block class="...')
#9 /home/user00114/public_html/211/vendor/magento/module-cms/Block/Page.php(156): Magento\Email\Model\Template\Filter->filter('{{block class="...')
#10 /home/user00114/public_html/211/vendor/magento/framework/View/Element/AbstractBlock.php(657): Magento\Cms\Block\Page->_toHtml()
#11 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(542): Magento\Framework\View\Element\AbstractBlock->toHtml()
#12 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(518): Magento\Framework\View\Layout->_renderBlock('cms_page')
#13 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('cms_page')
#14 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('cms_page')
#15 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('cms_page', true)
#16 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('cms_page')
#17 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(520): Magento\Framework\View\Layout->_renderContainer('content')
#18 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('content')
#19 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('content')
#20 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('content', true)
#21 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('content')
#22 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(520): Magento\Framework\View\Layout->_renderContainer('main')
#23 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('main')
#24 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('main')
#25 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('main', true)
#26 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('main')
#27 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(520): Magento\Framework\View\Layout->_renderContainer('columns')
#28 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('columns')
#29 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('columns')
#30 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('columns', true)
#31 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('columns')
#32 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(520): Magento\Framework\View\Layout->_renderContainer('main.content')
#33 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('main.content')
#34 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('main.content')
#35 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('main.content', true)
#36 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('main.content')
#37 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(520): Magento\Framework\View\Layout->_renderContainer('page.wrapper')
#38 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('page.wrapper')
#39 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('page.wrapper')
#40 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('page.wrapper', true)
#41 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('page.wrapper')
#42 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(520): Magento\Framework\View\Layout->_renderContainer('root')
#43 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('root')
#44 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('root')
#45 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('root', true)
#46 /home/user00114/public_html/211/vendor/magento/framework/View/Layout.php(938): Magento\Framework\View\Layout\Interceptor->renderElement('root')
#47 [internal function]: Magento\Framework\View\Layout->getOutput()
#48 /home/user00114/public_html/211/vendor/magento/framework/Interception/Interceptor.php(144): call_user_func_array(Array, Array)
#49 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Layout/Interceptor.php(494): Magento\Framework\View\Layout\Interceptor->___callPlugins('getOutput', Array, Array)
#50 /home/user00114/public_html/211/vendor/magento/framework/View/Result/Page.php(241): Magento\Framework\View\Layout\Interceptor->getOutput()
#51 /home/user00114/public_html/211/vendor/magento/framework/View/Result/Layout.php(162): Magento\Framework\View\Result\Page->render(Object(Magento\Framework\App\Response\Http\Interceptor))
#52 [internal function]: Magento\Framework\View\Result\Layout->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#53 /home/user00114/public_html/211/vendor/magento/framework/Interception/Interceptor.php(74): call_user_func_array(Array, Array)
#54 /home/user00114/public_html/211/vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Framework\View\Result\Page\Interceptor->___callParent('renderResult', Array)
#55 /home/user00114/public_html/211/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'renderResult', Object(Magento\Framework\View\Result\Page\Interceptor), Array, 'result-varnish-...')
#56 /home/user00114/public_html/211/vendor/magento/module-page-cache/Model/Controller/Result/VarnishPlugin.php(74): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#57 [internal function]: Magento\PageCache\Model\Controller\Result\VarnishPlugin->aroundRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Closure), Object(Magento\Framework\App\Response\Http\Interceptor))
#58 /home/user00114/public_html/211/vendor/magento/framework/Interception/Chain/Chain.php(67): call_user_func_array(Array, Array)
#59 /home/user00114/public_html/211/vendor/magento/framework/Interception/Interceptor.php(136): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'renderResult', Object(Magento\Framework\View\Result\Page\Interceptor), Array, 'result-builtin-...')
#60 /home/user00114/public_html/211/vendor/magento/module-page-cache/Model/Controller/Result/BuiltinPlugin.php(67): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#61 [internal function]: Magento\PageCache\Model\Controller\Result\BuiltinPlugin->aroundRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Closure), Object(Magento\Framework\App\Response\Http\Interceptor))
#62 /home/user00114/public_html/211/vendor/magento/framework/Interception/Interceptor.php(140): call_user_func_array(Array, Array)
#63 /home/user00114/public_html/211/var/generation/Magento/Framework/View/Result/Page/Interceptor.php(130): Magento\Framework\View\Result\Page\Interceptor->___callPlugins('renderResult', Array, Array)
#64 /home/user00114/public_html/211/vendor/magento/framework/App/Http.php(119): Magento\Framework\View\Result\Page\Interceptor->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#65 /home/user00114/public_html/211/vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#66 /home/user00114/public_html/211/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#67 {main} [] []
Best Answer
In your error it says
Magento\Framework\View\Element\Template
and notCustomProductCollection
.You are referring the wrong block class in your macro:
It should be:
Note the different class attribute value.
P.S:
IMHO you also have constructor errors, you are missing the
$data
parameter. It should be:Note both the added parameter
$data = []
andparent::__construct($context, $data);
.