Войти

Показать полную графическую версию : [решено] 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, не определена.
Пол года назад также подключала модули всё работает до сих пор. а во вновь созданных никак. Почему так?!

Sham
18-02-2011, 20:24
Попробуйте через $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>

Sham
21-02-2011, 22:23
Текст ошибки какой? Стоп может быть на любой строке, включая 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

?>

Sham
22-02-2011, 07:48
rtm (http://docs.php.net/manual/ru/language.variables.scope.php)

zvezda_t
22-02-2011, 09:37
да. я знаю что внутри функций идет локальная область видимости.
Но у меня же нет функций. просто подключив файл - переменная должна определяться без global, почему тогда у меня без global перестало работать (раньше работало!!!)
кажется всё очевидно - но не работает. я не вижу ошибки...

Sham
23-02-2011, 08:34
Можно предположить, что "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, огромное Вам спасибо! Всегда меня выручаете!!!
Разрешите поздравить Вас с Праздником! Нам просто необходимы такие защитники как Вы!
Здоровья, Счастья, Любви и много много радости Вам и вашим близким!

Sham
24-02-2011, 11:09
zvezda_t, Вас также с праздником :) (слово "защитник" не имеет гендерной окраски)

zvezda_t
24-02-2011, 11:45
что ж: Служу отечеству :) :) :) спасибо :)
Sham, а где я могу посмотреть кто мне благодарность объявил? )))))))




© OSzone.net 2001-2012