Мне удалось решить эту проблему следующим образом.
Произошли две отдельные проблемы.
Во-первых, в разделе v1.6 не был правильно инициализирован параметр «option». Благодаря пользователю hbit в этот запрос, который я сделал , я смог решить. изменив код следующим образом:
// Dispatch the application.
$option = JRequest::getCmd('option');
$app->dispatch($option);
Однако это не решило проблему, и код все еще падал в точке ob_start.
Во-вторых, я не мог найти истинную причину аварии, но пошел на обходной путь. Поскольку рассматриваемый бит ob_start, расположенный в /libraries/joomla/application/component/helper.php, существует только для сбора вывода компонента в переменную, я обошел его, потянув код, который $ app-> dispatch ( $ option) 'запускается в моем файле и исправляет раздел проблемы.
Сначала я изменил основной раздел следующим образом:
// Dispatch the application.
$option = JRequest::getCmd('option');
/** The process crashes here for some reason
* (See /5795806/joomla-1-6-vneshnyaya-problema-vzaimodeistviya-s-php).
* So we comment out the Joomla! function, pull the code in here and
* push the component content into the Joomla document buffer ourselves.
**/
//$app->dispatch($option);
$this->joomdispatch($option);
Затем я написал функцию 'joomdispatch' следующим образом:
private function joomdispatch($option) {
/************************
* This is pulled from function 'render'
* in /libraries/joomla/application.php
************************/
$document = JFactory::getDocument();
$document->setTitle(JApplication::getCfg('sitename'). ' - ' .JText::_('JADMINISTRATION'));
$document->setDescription(JApplication::getCfg('MetaDesc'));
/************************
* This is pulled from function 'renderComponent'
* in /libraries/joomla/application/component/helper.php
* Function 'renderComponent' is called by the
* '$contents = JComponentHelper::renderComponent($component);' line
* We exclude that line and jump to the function code
************************/
// Initialise variables.
$app = JFactory::getApplication();
// Load template language files.
$template = $app->getTemplate(true)->template;
$lang = JFactory::getLanguage();
$lang->load('tpl_'.$template, JPATH_BASE, null, false, false)
|| $lang->load('tpl_'.$template, JPATH_THEMES."/$template", null, false, false)
|| $lang->load('tpl_'.$template, JPATH_BASE, $lang->getDefault(), false, false)
|| $lang->load('tpl_'.$template, JPATH_THEMES."/$template", $lang->getDefault(), false, false);
$scope = $app->scope; //record the scope
$app->scope = $option; //set scope to component name
// Build the component path.
$option = preg_replace('/[^A-Z0-9_\.-]/i', '', $option);
$file = substr($option, 4);
// Define component path.
define('JPATH_COMPONENT', JPATH_BASE.DS.'components'.DS.$option);
define('JPATH_COMPONENT_SITE', JPATH_SITE.DS.'components'.DS.$option);
define('JPATH_COMPONENT_ADMINISTRATOR', JPATH_ADMINISTRATOR.DS.'components'.DS.$option);
// get component path
if ($app->isAdmin() && file_exists(JPATH_COMPONENT.DS.'admin.'.$file.'.php')) {
$path = JPATH_COMPONENT.DS.'admin.'.$file.'.php';
} else {
$path = JPATH_COMPONENT.DS.$file.'.php';
}
$task = JRequest::getString('task');
// Load common and local language files.
$lang->load($option, JPATH_BASE, null, false, false)
|| $lang->load($option, JPATH_COMPONENT, null, false, false)
|| $lang->load($option, JPATH_BASE, $lang->getDefault(), false, false)
|| $lang->load($option, JPATH_COMPONENT, $lang->getDefault(), false, false);
// Handle template preview outlining.
$contents = null;
// Get component html
/************************
* This has been edited from the native 'ob_start'.
* Could use curl as well
***********************/
$contents = file_get_contents($this->joomUrl . '/index.php?' . $this->joomQS);
// Build the component toolbar
jimport('joomla.application.helper');
if (($path = JApplicationHelper::getPath('toolbar')) && $app->isAdmin()) {
// Get the task again, in case it has changed
$task = JRequest::getString('task');
// Make the toolbar
include_once $path;
}
$app->scope = $scope; //revert the scope
/************************
* Back to function 'renderComponent' code
* to complete process
************************/
$document->setBuffer($contents, 'component');
// Trigger the onAfterDispatch event.
JPluginHelper::importPlugin('system');
JApplication::triggerEvent('onAfterDispatch');
}
С этим все отлично работает. Не дошел до (странной) ошибки, но сумел ее обойти.