PDA

Zobacz pełną wersję : Błąd po podpięciu modułu do podstrony



j.doe
24-07-2017, 13:38
Witam.

Mam działający moduł na stronie głównej, który chcę podpiąć do innych podstron. Po dołączeniu modułu na niektórych podstronach działa on prawidłowo, jednak na kilku pojawia się biała strona z komunikatem o błędzie:
Fatal error: Cannot redeclare class ModProductsMenuHelper in /opt2/data-dev/modules/mod_products_menu/helper.php on line 15

Czy możecie mnie nakierować na rozwiązanie tego problemu? Z góry dziękuję.

Jola
25-07-2017, 00:48
Trzeba dodać warunek przed wywołaniem klasy:

if(!class_exists('ModProductsMenuHelper'))

j.doe
25-07-2017, 10:22
<?php/** * Slajder class for Hello World! module * * @package Joomla.Tutorials * @subpackage Modules * @link http://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module * @license GNU/GPL, see LICENSE.php * mod_helloworld is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. */ if(!class_exists('ModProductsMenuHelper'))class ModProductsMenuHelper{ /** * Retrieves the hello message * * @param array $params An object containing the module parameters * * @access public */ public function getProducts($params) { $lang = JFactory::getLanguage(); $langTag = $lang->getTag();
$app = JFactory::getApplication(); $isSMB = $app->get('isSMB');
$parentMenuId = $langTag == 'pl-PL' ? 107 : 103;
$results = $this->getChildren($parentMenuId, $langTag);

return $results; }

private function getChildren($parentId, $langTag){ // Get a db connection. $db = JFactory::getDbo(); // Create a new query object. $query = $db->getQuery(true); $query ->select(array('id', 'title', 'path', 'alias')) ->from($db->quoteName('#__menu')) ->where("(language = '*' OR language= ".$db->quote($langTag).") AND published = 1 AND parent_id=".$parentId) ->order($db->quoteName('lft') . ' ASC, '.$db->quoteName('id') . ' ASC'); // Reset the query using our newly populated query object. $db->setQuery($query); // Load the results as a list of stdClass objects (see later for more options on retrieving data). $results = $db->loadObjectList(); foreach ($results as $key=>$val){ $results[$key]->children = $this->getChildren($val->id, $langTag); }
return $results; }}

To mój kod po dodaniu warunku, jednak nadal pojawia się komunikat:
Parse error: syntax error, unexpected 'class' (T_CLASS) in /opt2/data-dev/modules/mod_products_menu/helper.php on line 15

Jola
25-07-2017, 15:50
Błąd wynika z tego, że taka nazwa klasy już występuje w innym miejscu Joomla i jest używana. Wydaje mi się, że ten moduł jest pisany przez kogoś - jednorazowo.
Należy zmienić nazwę klasy w helperze i w wywołaniu w pliku modułu na unikalną np ModWlasnyHelper1556.

j.doe
25-07-2017, 16:06
Działa, dziękuję!