I'm not sure which category to save this under (seems to be related to SP Pagebuilder and the Helix Ultimate template).
I'm using Fabrik (site builder extension for Joomla) to create some lists/forms for my site. I have a list called "Documents" setup that is supposed to open a modal when I click the "Add" or an "Edit" link in the list and load the "Documents" form inside the modal. If I try Joomlart's JPurity template or even the Helix 3 template, if the list is accessed via site menu and the menu item's type is "Fabrik List", the modal will load the form.
If I try to use the Helix Ultimate template, I get an error with the message "Unable to load renderer class metas". (I got this from opening the URL of the ajax request that failed).
I created a Fabrik list module for my "Documents" list and embeded it into an SP Pagebuilder page. Regardless of the template used, I also get the "Unable to load renderer class metas" error from the ajax request if I try to open the "Documents" form in a modal from the "Documents" list.
I've gone through Fabrik's forums and asked about this. I recieved a reply that suggested it might be the template that I'm using or SP Pagebuilder, so I'm inquiring here to see if you might have any suggestions. I know for sure the error is being generated from the file libraries/src/Document/Factory.php (line 101). Farbrik is using the public function loadRenderer($type) from the Document class (libraries/src/Document/Document.php) and this seems to be what is triggering the error.
From Fabrik's file (libraries/fabrik/fabrik/fabrik/Document/PartialDocument.php), the protected function renderTemplate() calls the public function getBuffer which calls the loadRenderer($type) function (mentioned above)
The URL of the ajax request is: The url of the ajax request is: https://mysite.com/index.php/component/fabrik/form/8/?Itemid=138&parent_id=42&tmpl=component&ajax=1&format=partial
It was suggested that the parameter tmpl=component is required and I'm wondering if either the Helix Ultimate template or SP Pagebuilder would remove it before it is passed to Fabrik's renderTemplate() function?
These are the functions from Fabrik's PartialDocument.php file:
protected function _renderTemplate()
{
$replace = array();
$with = array();
foreach ($this->_template_tags as $jdoc => $args)
{
$replace[] = $jdoc;
$with[] = $this->**getBuffer($args['type'], $args['name'], $args['attribs']);**
}
return str_replace($replace, $with, $this->_template);
}
}
public function getBuffer($type = null, $name = null, $attribs = array())
{
// If no type is specified, return the whole buffer
if ($type === null)
{
return parent::$_buffer;
}
$title = (isset($attribs['title'])) ? $attribs['title'] : null;
if (isset(parent::$_buffer[$type][$name][$title]))
{
return parent::$_buffer[$type][$name][$title];
}
$renderer = **$this->loadRenderer($type);**
if ($this->_caching == true && $type == 'modules')
{
$cache = Factory::getCache('com_modules', '');
$hash = md5(serialize(array($name, $attribs, null, $renderer)));
$cbuffer = $cache->get('cbuffer_' . $type);
if (isset($cbuffer[$hash]))
{
return Cache::getWorkarounds($cbuffer[$hash], array('mergehead' => 1));
}
else
{
$options = array();
$options['nopathway'] = 1;
$options['nomodules'] = 1;
$options['modulemode'] = 1;
$this->setBuffer($renderer->render($name, $attribs, null), $type, $name);
$data = parent::$_buffer[$type][$name][$title];
$tmpdata = Cache::setWorkarounds($data, $options);
$cbuffer[$hash] = $tmpdata;
$cache->store($cbuffer, 'cbuffer_' . $type);
}
}
else
{
$this->setBuffer($renderer->render($name, $attribs, null), $type, $name, $title);
}
return parent::$_buffer[$type][$name][$title];
}
Any thoughts?
Thank you!