• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Помощь Городской портал на DLE 10.3

Статус
В этой теме нельзя размещать новые ответы.

dollar1981

Гуру форума
Заблокирован
Регистрация
17 Май 2012
Сообщения
183
Реакции
88
  • Автор темы
  • Заблокирован
  • #1
В общем суть вопроса такова: Поставил сие чудо, установил БД, поставил модуль xPay. Добавил модальные окна по оплате, решил вопрос с конфликтом js в карточке организаций.
И вот тут, вылезла пренеприятнейшая ошибочка.
В модальном окне, где проводится выбор платных услуг каталога организаций, в самом верху присутствует вот такая вот строка ошибки:
Warning: Invalid argument supplied for foreach() in /home/f/fb7913c2/hhhhh/public_html/engine/inc/payments/extension/plagin/tag_hide/api.php on line 34

Вот сам код файла на который ссылается данная строка ошибки и строчка из кода файла foreach( $this->tagDB as $tag => $row ) на которую ссылается строка ошибки:
PHP:
<?php

if( !defined( "DATALIFEENGINE" ) ) die( "Hacking attempt!" );

class tag_hideApiPlagin {

    public $PlaginOn = false;
    public $PlaginID = null;
    public $Options = array();

    //------------------------------------------=-=-=-=-=-=-=-=-=
    //    Автоопределение настроек
    //------------------------------------------=-=-=-=-=-=-=-=-=

    public function __construct(){
        global $Payments;
    
        if( !is_object( $Payments ) ) require_once( ENGINE_DIR."/inc/payments/management/init.php" );
        $this->PlaginID = $Payments->Cache->PlaginIndex['tag_hide'];
        $this->Options = $Payments->Cache->Plagin[ $this->PlaginID ]['options'];
        $this->PlaginOn = $Payments->Cache->Plagin[ $this->PlaginID ]['status'] == 1 ? true : false;
        $this->tagDB = unserialize( $this->Options['db'] );
    }

    //------------------------------------------=-=-=-=-=-=-=-=-=
    //    Парсер тегов
    //------------------------------------------=-=-=-=-=-=-=-=-=

    public function ParseTags( $content ){
    
        if( $this->PlaginOn !== true ) return $this->endParse( $content );
        if( count( $this->tagDB ) > 0 )
            {
                foreach( $this->tagDB as $tag => $row )
                    {
                        $content = preg_replace( "#\\[PaymentsTagHide:{$tag}\\](.*?)\\[/PaymentsTagHide:{$tag}\\]#ies", "\$this->ParseTag( '{$tag}', '\\1' )", $content );
                    }
            }
        
        return $this->endParse( $content );
    }

    //------------------------------------------=-=-=-=-=-=-=-=-=
    //    Парсер конкретного тега
    //------------------------------------------=-=-=-=-=-=-=-=-=

    private function ParseTag( $tag, $text ){
        global $member_id, $is_logged, $Payments;
    
        $text = stripslashes( $text );
        if( !is_array( $this->tagDB[ $tag ] ) ) return $text;
    
        if( !$is_logged && $this->tagDB[ $tag ]['allow_guest'] != 1 ) return "<div class=\"quote\">Скрытый текст, необходима авторизация.</div>";
    
        if( $is_logged && $this->tagDB[ $tag ]['pay_type'] == "always" )
            {
                $allowTag = explode( ",", $member_id['payments_tag_hide'] );
            }
                else
            {
                $allowTag = explode( ",", $_SESSION['payments_tag_hide'] );
            }
    
        if( in_array( $tag, $allowTag ) ) return $text;
        if( in_array( $member_id['user_group'], $this->tagDB[ $tag ]['echo_group'] ) ) return $text;
    
        $this->tagDB[ $tag ]['text'] = stripslashes( $this->tagDB[ $tag ]['text'] );
        $this->tagDB[ $tag ]['text'] = str_replace( "{price}", $this->tagDB[ $tag ]['price'].$Payments->Currency( $this->tagDB[ $tag ]['currency'] ), $this->tagDB[ $tag ]['text'] );
        $this->tagDB[ $tag ]['text'] = str_replace( "{pay}", "/payments/service/tag_hide/{$tag}.html", $this->tagDB[ $tag ]['text'] );
    
        return $this->tagDB[ $tag ]['text'];
    }

    //------------------------------------------=-=-=-=-=-=-=-=-=
    //    Окончательная очистка всех тегов
    //------------------------------------------=-=-=-=-=-=-=-=-=

    private function endParse( $content ){
        while( strpos( $content, "[PaymentsTagHide" ) !== false ) $content = preg_replace( "#\\[PaymentsTagHide:(.+?)\\](.*?)\\[/PaymentsTagHide:(.+?)\\]#is", "\\2", $content );
        return $content;
    }
}

?>

Не пойму в чем конфликт! И насколько это критично. Сам модуль скрытия текста тоже прикручен к xPay.
Может кто то уже решал данную проблему?
Или может знает как скрыть вывод этой ошибки, при условии что ошибка не повлияет на функциональность модуля Tag Hide?
 
PHP:
var_dump($this->tagDB);
die();
перед проблемной строкой - что выводит?
 
Попробуй в 22 строке заменить
PHP:
$this->tagDB = unserialize( $this->Options['db'] );
//на
$this->tagDB = (array)unserialize( $this->Options['db'] );

Если ошибка останется то надо будет приложить сюда вывод:
PHP:
var_dump($this->tagDB);
из 23 строки, т.е. после присвоения и в 33 строке до foreach, вдруг переменную кто-то меняет.

Еoе меня смущает отсутствие определения tagDB, её бы хорошо объявить в начале класса
PHP:
public $tagDB= null;
 
  • Автор темы
  • Заблокирован
  • #4
Попробуй в 22 строке заменить
PHP:
$this->tagDB = unserialize( $this->Options['db'] );
//на
$this->tagDB = (array)unserialize( $this->Options['db'] );

Если ошибка останется то надо будет приложить сюда вывод:
PHP:
var_dump($this->tagDB);
из 23 строки, т.е. после присвоения и в 33 строке до foreach, вдруг переменную кто-то меняет.

Еoе меня смущает отсутствие определения tagDB, её бы хорошо объявить в начале класса
PHP:
public $tagDB= null;
Помогло. Сейчас строки с ошибкой нет. Теперь необходимо проверить будет ли корректно работать сам плагин после этих правок. Дело в том что сам модуль xPay должен с ними дружить. Но получалось так, что эти два плагина: board dle и taghide установленные в xPay почему то за конфликтовали. Хотя ранее я уже ставил и этот модуль и эти плагины и все было ок.
Прошу вас пока тему не закрывать, еще проверю на работоспособность плагин taghide.

Все проверил. Все работает!!! Тему можно закрыть. Решение найдено благодаря latteo.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху