Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не работают глобальные переменные (global)
 
 автор: alba   (19.07.2009 в 11:43)   письмо автору
 
 

всем привет!

возникла проблемка с компонентом галереи TrueGallery для Joomla 1.5
имеется файл true.legasy.php (листинг ниже). Этот файл включается инструкцией require_once в файл admin.true.php в самом начале, еще до определения функций...
НО, почему то в функциях файла admin.true.php переменные определенные в true.legasy.php не видны... хотя в начале каждой функции все необходимые переменные определяются как global...
в чем может быть проблема?

В частности, я говорю о переменной $language


файл - true.legasy.php

<?php
(defined '_VALID_MOS' ) or defined '_JEXEC' )) or die ( 'Direct Access to this location is not allowed.' );


if (! 
defined 'DS' )) {
    
define 'DS'DIRECTORY_SEPARATOR );
}

if (! 
defined 'JOOMLA_JVERSION' )) {
    if (
defined '_JEXEC' ) && class_exists 'JApplication' )) {
        
        if (! 
defined '_ISO' )) {
            
define '_ISO''charset=utf-8' );
        }
        
        
$config = &JFactory::getConfig ();
        
        
define 'JOOMLA_JVERSION''1.5' );
        
define 'TRUE_ADMIN'JPATH_ROOT DS 'administrator' DS 'components' DS 'com_true' DS );
        
define 'TRUE_BASE'JPATH_ROOT DS 'components' DS 'com_true' DS );
        
define 'TRUE_HELPERS'JPATH_ROOT DS 'components' DS 'com_true' DS 'helpers' DS );
        
define 'TRUE_LEGACY'JPATH_ROOT DS 'components' DS 'com_true' DS 'libraries' DS 'joomlatune' DS 'legacy' DS );
        
define 'TRUE_LIBRARIES'JPATH_ROOT DS 'components' DS 'com_true' DS 'libraries' DS );
        
define 'TRUE_INDEX2'$mainframe->getCfg 'live_site' ) . '/administrator/index2.php?option=com_true' );
        
        if (! 
$config->getValue 'config.legacy' )) {
            
$config->setValue 'config.live_site'substr_replace JURI::root (), '', - 1) );
            
$config->setValue 'config.absolute_path'JPATH_SITE );
            
$config->setValue 'config.cachepath'JPATH_BASE DS 'cache' );
            
            
$lang = & JFactory::getLanguage ();
            
$config->setValue 'config.lang'$lang->getBackwardLang () );
            
            if (! 
class_exists 'mosDBTable' )) {
                class 
mosDBTable extends JTable {
                    function 
mosDBTable($table$key, &$db) {
                        
parent::__construct $table$key$db );
                    }
                }
            }
        } else {
            
$config->setValue 'config.cachepath'JPATH_BASE DS 'cache' );
        }
        
        
$language = & JFactory::getLanguage ();
        
$language->load 'com_true'JPATH_ROOT );
    
    } else {
        
        global 
$mosConfig_absolute_path$mosConfig_lang$mainframe;
        
define 'JOOMLA_JVERSION''1.0' );
        
define 'TRUE_ADMIN'$mainframe->getCfg 'absolute_path' ) . DS 'administrator' DS 'components' DS 'com_true' DS );
        
define 'TRUE_BASE'$mainframe->getCfg 'absolute_path' ) . DS 'components' DS 'com_true' DS );
        
define 'TRUE_HELPERS'$mainframe->getCfg 'absolute_path' ) . DS 'components' DS 'com_true' DS 'helpers' DS );
        
define 'TRUE_LEGACY'$mainframe->getCfg 'absolute_path' ) . DS 'components' DS 'com_true' DS 'libraries' DS 'joomlatune' DS 'legacy' DS );
        
define 'TRUE_LIBRARIES'$mainframe->getCfg 'absolute_path' ) . DS 'components' DS 'com_true' DS 'libraries' DS );
        
define 'TRUE_INDEX2'$mainframe->getCfg 'live_site' ) . '/administrator/index2.php?option=com_true' );
        
        require_once (
TRUE_LIBRARIES 'joomlatune' DS 'localization' DS 'string.php');
        require_once (
TRUE_LIBRARIES 'joomlatune' DS 'localization' DS 'language.php');
        
        
$lang $mosConfig_lang;
        
        if (! 
is_file TRUE_BASE 'languages' DS $lang '.ini' )) {
            
$lang 'english';
        }
        
        
$language = &JoomlaTuneLanguage::getInstance ();
        
$language->setRoot TRUE_BASE 'languages' );
        
$language->load $lang );
        
        
$joomfish $mosConfig_absolute_path DS 'components' DS 'com_joomfish' DS 'joomfish.php';
        
        
            
            
// small hack for JoomFish 1.8.2+ on Joomla 1.0.x
            
if (is_file $joomfish )) {
                
                include_once (
$mosConfig_absolute_path DS 'administrator' DS 'components' DS 'com_joomfish' DS 'joomfish.class.php');
                include_once (
$mosConfig_absolute_path DS 'administrator' DS 'components' DS 'com_joomfish' DS 'libraries' DS 'joomla' DS 'language.php');
                
                if (
class_exists 'JLanguageHelper' )) {
                    if (isset ( 
$mainframe ) && $mainframe->isAdmin ()) {
                        
$jfm = new JoomFishManager $mosConfig_absolute_path DS 'administrator' DS 'components' DS 'com_joomfish' );
                        
$adminLang strtolower $jfm->getCfg 'componentAdminLang' ) );
                        
$lng = & JLanguageHelper::getLanguage $adminLang );
                    } else {
                        
$lng = & JLanguageHelper::getLanguage ();
                    
                    }
                    
                    if (
is_array $lng->_strings ) && is_array $language->languages [$lang] )) {
                        
$lng->_strings array_merge $lng->_strings$language->languages [$lang] );
                    }
                }
            } else {
                if ( !
class_exists 'JText' )) {
                                class 
JText {
                function 
_($text$jsSafe false) {
                    
$lang = & JoomlaTuneLanguage::getInstance ();
                    return 
$lang->$text$jsSafe );
                }
                
                function 
sprintf($string) {
                    
$lang = & JoomlaTuneLanguage::getInstance ();
                    
$args func_get_args ();
                    if (
count $args ) > 0) {
                        
$args [0] = $lang->$args [0] );
                        return 
call_user_func_array 'sprintf'$args );
                    }
                    return 
'';
                }
            }
                }
                
                if (
class_exists 'JLanguageHelper' )) {
                    
// small hack for JoomFish 1.8.2+ on Joomla 1.0.x
                    
$lng = & JLanguageHelper::getLanguage ();
                    if (
is_array $lng->_strings ) && is_array $language->languages [$lang] )) {
                        
$lng->_strings array_merge $lng->_strings$language->languages [$lang] );
                    }
                }
            }
        }
    }
?>

  Ответить  
 
 автор: Trianon   (19.07.2009 в 12:28)   письмо автору
 
   для: alba   (19.07.2009 в 11:43)
 

возможно
к этому моменту уже определена константа JOOMLA_JVERSION
либо не определены константа _JEXEC или класс JApplication

  Ответить  
 
 автор: Alba   (19.07.2009 в 12:43)   письмо автору
123.2 Кб
 
   для: Trianon   (19.07.2009 в 12:28)
 

нет, я сразу под строкой где подключается файл legasy.true.php делаю print_r($language) и все хорошо отрабатывает, т.е. выводится листинг переменной $language, а если делаю тоже самое в какой-нить ф-ии, то ничего не выводится...

на всякий прикрепил файл admin.true.php

  Ответить  
 
 автор: Trianon   (19.07.2009 в 12:52)   письмо автору
 
   для: Alba   (19.07.2009 в 12:43)
 

а где в функции указывается, что $language - глобальная переменная?

  Ответить  
 
 автор: Alba   (19.07.2009 в 13:06)   письмо автору
 
   для: Trianon   (19.07.2009 в 12:52)
 

только в тех, где нужна она, посмотрите пожалуйста строку 2249, в ней у меня ошибка возникает...


Fatal error: Call to a member function getLanguage() on a non-object in Z:\home\woter\www\administrator\components\com_true\admin.true.php on line 2249

  Ответить  
 
 автор: Trianon   (19.07.2009 в 13:13)   письмо автору
 
   для: Alba   (19.07.2009 в 12:43)
 

>нет, я сразу под строкой где подключается файл legasy.true.php делаю print_r($language) и все хорошо отрабатывает,
А если в этом месте сделать print_r($GLOBALS['language']); ?

  Ответить  
 
 автор: Alba   (19.07.2009 в 13:53)   письмо автору
 
   для: Trianon   (19.07.2009 в 13:13)
 

>А если в этом месте сделать print_r($GLOBALS['language']); ?

ничего не вывелось... что это значит?

  Ответить  
 
 автор: Trianon   (19.07.2009 в 14:05)   письмо автору
 
   для: Alba   (19.07.2009 в 13:53)
 

значит переменная не глобальная.

  Ответить  
 
 автор: Alba   (19.07.2009 в 14:14)   письмо автору
 
   для: Trianon   (19.07.2009 в 14:05)
 

ну это понятно, просто тот кто писал компонент как-то тестировал его наверно, и думаю что у него все работало....
как сделать ее глобальной? глобалс в настройках отключены у меня...
и почему то другие скрипты работают нормально, хотя специально никак не колдовал с переменными...

  Ответить  
 
 автор: Trianon   (19.07.2009 в 15:10)   письмо автору
 
   для: Alba   (19.07.2009 в 14:14)
 

общее впечатление такое, что Вы пытаетесь подключать эти файлы внутрь открытого тела функции... или класса...

А еще я праткически уверен, что у Вас заблокированы диагностики.

  Ответить  
 
 автор: alba   (19.07.2009 в 15:43)   письмо автору
 
   для: Trianon   (19.07.2009 в 15:10)
 

>общее впечатление такое, что Вы пытаетесь подключать эти файлы внутрь открытого тела функции... или класса...
я думал об этом, проверил, но ничего не нашел... если вы знакомы с жумлой, то наверняка знаете, что компонент начинает исполнение с файла admin.имя_компонента.php. Этот стартовый файл я прикреплял к сообщению выше. Там видно что второй файл включается вне функции...


>А еще я праткически уверен, что у Вас заблокированы диагностики.
Извиняюсь, вы про что? :-)

  Ответить  
 
 автор: Trianon   (19.07.2009 в 15:59)   письмо автору
 
   для: alba   (19.07.2009 в 15:43)
 

>если вы знакомы с жумлой,

незнаком

>>А еще я праткически уверен, что у Вас заблокированы диагностики.
>Извиняюсь, вы про что? :-)

error_reporting()

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования