Joomla JError :: riseWarning () показывает дважды - PullRequest
0 голосов
/ 05 декабря 2011

Я пишу плагин для Joomla, который выглядит примерно так:

<?php

    // no direct access
    defined( '_JEXEC' ) or die( 'Restricted access' );

    class plgSystemTest extends JPlugin {
        function onAfterInitialise(){
            static $showWarnings = true;

            if($somecondition && $showWarnings)
                JError::raiseWarning(100,'Some warning that shows up twice.');

            $showWarnings = false;
        }
    }

?>

Я тестирую этот плагин на Joomla 1.5, 1.6 и 1.7. Хотя предупреждение отображается в каждом из них, оно появляется дважды при второй загрузке страницы.

Кстати, стоит также отметить, что флаг $showWarnings совсем не помогает.

enter image description here

Примечания

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Вы проверили, что никакой другой фрагмент кода не вызывает JError :: riseWarning или событие "onAfterInitialise" ?. Эта статическая переменная должна работать, если у вас нет двух разных экземпляров плагина.

Вы можете попробовать это:

class plgSystemTest extends JPlugin {
        function onAfterInitialise(){
            static $showWarnings;
            if ( !isset( $showWarnings ) ) {
                JError::raiseWarning(100,'Some warning that shows up twice.');
                $showWarnings = false;
            }
        }
    }
}

, если это все еще не работает, попробуйте это:

class plgSystemTest extends JPlugin {
        protected static $showWarnings;

        function onAfterInitialise(){
            if ( !isset( self::$showWarnings ) ) {
                JError::raiseWarning(100,'Some warning that shows up twice.');
                $showWarnings = false;
            }
        }
    }
}

Надеюсь, это помогло!

Я редактирую ответ, чтобы ответить на ваш комментарий

Прежде всего: извините, я допустил ошибку в своем коде. Во втором фрагменте кода вы должны изменить это:

$showWarnings = false

Для этого:

self::$showWarnings = false;

Если это все еще не работает, попробуйте это:

class plgSystemTest extends JPlugin {
    protected static $showWarnings = true;

    function onAfterInitialise(){
        static $call_count = null;
        if ( self::$showWarnings === true ) {
            if( !isset( $call_count ) ) {
                $call_count = 1;
            } else {
                $call_count++;
            }
            JError::raiseWarning(100,'Some warning that shows up twice. Total: ' . $call_count);
            self::$showWarnings = false;
        }
    }
}

Привет

0 голосов
/ 07 декабря 2011

Как намекнул @alghimo, предупреждения каким-то образом сохраняются в сеансе.

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

Способ заставить работать так, как я хочу, - не показывать сообщение, когда $_GET['layout'] равно edit:

if($_REQUEST['layout'] != 'edit'){
    JError::raiseWarning(100, 'Bla bla bla.');
}

Тем не менее, я не считаю, что это правильноответ на вопрос.Если кто-нибудь придумает более удачную идею, я буду более чем рад соответственно поменять ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...