Joomla 3.9 - домашняя страница исчезла, когда я дважды опубликовал собственный модуль, разработанный мной - PullRequest
0 голосов
/ 24 января 2019

Я разработал модуль Joomla, он работал нормально. Когда он был опубликован один раз, но когда я опубликовал его снова на той же странице, домашняя страница исчезла, и я получил 500 ошибок, и если я попытался неопубликовать один модуль, оба не были опубликованы.

Как решить эту проблему. В качестве предположения я думаю, что я должен создать динамический идентификатор с каждым модулем но я не знаю, как это сделать в Joomla.

Этот код создает проблемы.

function group_by_key($array) {
    $result = array();

    foreach ($array as $sub) {
        foreach ($sub as $k => $v) {
            $result[$k][] = $v;
        }
    }
    return $result;
}

$features_list = array(
    $features_list1 = group_by_key($features[0]),
    $features_list2 = group_by_key($features[1]),
    $features_list3 = group_by_key($features[2]),
    $features_list4 = group_by_key($features[3]),
);

Потому что я получаю ошибку ниже.

Fatal error: Cannot redeclare group_by_key() (previously declared in E:\xampp\htdocs\joomla\do\modules\mod_xp_comparison\tmpl\default.php:31) in E:\xampp\htdocs\joomla\do\modules\mod_xp_comparison\tmpl\default.php on line 40

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Если вы хотите следовать стандартным практикам Joomla, вместо размещения пользовательских функций в макете создайте класс помощника (helper.php):

defined('_JEXEC') or die;

class ModXpComparisonHelper
{
    public static function group_by_key($array)
    {
        $result = array();

        foreach ($array as $sub)
        {
            foreach ($sub as $k => $v)
            {
                $result[$k][] = $v;
            }
        }

        return $result;
    }
}

Включите помощника в файл основного модуля (mod_xp_comparison.php):

JLoader::register('ModXpComparisonHelper', __DIR__ . '/helper.php');

И затем при необходимости вызвать функцию:

$features_list = array(
    $features_list1 = ModXpComparisonHelper::group_by_key($features[0]),
    $features_list2 = ModXpComparisonHelper::group_by_key($features[1]),
    $features_list3 = ModXpComparisonHelper::group_by_key($features[2]),
    $features_list4 = ModXpComparisonHelper::group_by_key($features[3]),
);
0 голосов
/ 24 января 2019

Вы должны попробовать это так:

if (!function_exists('group_by_key')) {
    function group_by_key($array) {
        $result = array();

        foreach ($array as $sub) {
            foreach ($sub as $k => $v) {
                $result[$k][] = $v;
            }
        }
        return $result;
    }
}

$features_list = array(
    $features_list1 = group_by_key($features[0]),
    $features_list2 = group_by_key($features[1]),
    $features_list3 = group_by_key($features[2]),
    $features_list4 = group_by_key($features[3]),
);

Причина вышеизложенного состоит в том, что вы не можете включать (или объявлять) одну и ту же функцию дважды. Так что, если он уже определен в глобальной области действия, например, в вашем default.php, то это просто вызывает конфликт. Таким образом, если вы не уверены, то вам нужно использовать эту функцию внутри оператора условия if (!function_exists('any_function_name')) { ...// function ... }.

...