Показать полную графическую версию : [решено] cms Joomla, подключение файла в модуль, область видимости переменных
zvezda_t
18-02-2011, 07:25
Здравствуйте!
У меня Joomla 1.5.15
Создала модуль www/modules/mod_test1/mod_test1.php и там подключаю файл:
require_once("../www/function/cnst.php");
cnst.php:
<?php
$name1=500;
?>
Переменная $name1, в файле mod_test1.php, не определена.
Пол года назад также подключала модули всё работает до сих пор. а во вновь созданных никак. Почему так?!
Попробуйте через $GLOBALS['name1'] (фактически может определяться внутри функции/метода - можно об этом не знать, если не видеть скрипт и всю связку инклудов).
zvezda_t
21-02-2011, 07:10
Sham, показываю код файлов полностью.
www\modules\mod_test1 содержит два файла:
1)mod_test1.php
2)mod_test1.xml
www/function содержит файл:
cnst.php
Скрипты:
www/function/cnst.php
<?php
//текущий год
DEFINE('YEAR',date('Y'));
$name1=500;
?>
www\modules\mod_test1\mod_test1.php
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Go Away' );
require_once("../www/function/cnst.php");
print $name1;//почему не определена?
?>
www\modules\mod_test1\mod_test1.xml
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5" client="site">
<name>тестовый модуль</name>
<author>Toma</author>
<creationDate>январь 2011</creationDate>
<copyright>компания</copyright>
<license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license>
<authorEmail>zt@mail.ru</authorEmail>
<authorUrl>http://www.zt.ru/</authorUrl>
<version>1.5</version>
<description>Этот модуль показывает текст.</description>
<files>
<filename module="mod_test1">mod_test1.php</filename>
</files>
<params>
<param name="moduleclass_test1" type="text" default="" label="Суффикс класса модуля" description="Суффикс, который будет применен к CSS классу модуля (table.moduletable), это позволяет отдельное моделирование модуля." />
<param name="@spacer" type="spacer" default="" label="" description="" />
</params>
</install>
Текст ошибки какой? Стоп может быть на любой строке, включая defined и неправильный путь к cnst.php (лучше сделать абсолютным).
zvezda_t
22-02-2011, 07:25
ошибка:
Notice: Undefined variable: name1 in C:\www\modules\mod_test1\mod_test1.php on line 7
Работает, если объявляю переменные как глобальные. Но почему тогда в других модулях этой же cms!!, те же самые переменные работают, даже если их не объявлять глобальными? ничего не понимаю.
Скрипты:
www/function/cnst.php
<?php
//текущий год
DEFINE('YEAR',date('Y'));
global $name1;
$name1=500;
?>
www\modules\mod_test1\mod_test1.php
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Go Away' );
require_once("../www/function/cnst.php");
global $name1;
print $name1;//в этом случае выдает : 500
?>
rtm (http://docs.php.net/manual/ru/language.variables.scope.php)
zvezda_t
22-02-2011, 09:37
да. я знаю что внутри функций идет локальная область видимости.
Но у меня же нет функций. просто подключив файл - переменная должна определяться без global, почему тогда у меня без global перестало работать (раньше работало!!!)
кажется всё очевидно - но не работает. я не вижу ошибки...
Можно предположить, что "require_once("../www/function/cnst.php");" уже стоит где-то раньше, и повторно не вызывается (_once только однажды работает). Попробуйте обычный include (без once). Ну и Попробуйте через $GLOBALS['name1'] »
zvezda_t
24-02-2011, 10:46
Sham, Вы правы:
"require_once("../www/function/cnst.php");" уже стоит где-то раньше, и повторно не вызывается »
Оказалось, что на одну страницу я подключила два модуля.
И в обоих делала подключение файла:
"require_once("../www/function/cnst.php");"
Получается, что файл подключился один раз, а область видимости для каждого модуля своя, поэтому переменная была не определена.
ЗЫ Sham, огромное Вам спасибо! Всегда меня выручаете!!!
Разрешите поздравить Вас с Праздником! Нам просто необходимы такие защитники как Вы!
Здоровья, Счастья, Любви и много много радости Вам и вашим близким!
zvezda_t, Вас также с праздником :) (слово "защитник" не имеет гендерной окраски)
zvezda_t
24-02-2011, 11:45
что ж: Служу отечеству :) :) :) спасибо :)
Sham, а где я могу посмотреть кто мне благодарность объявил? )))))))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.