Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] cms Joomla, подключение файла в модуль, область видимости переменных (http://forum.oszone.net/showthread.php?t=199808)

zvezda_t 18-02-2011 07:25 1615858

cms Joomla, подключение файла в модуль, область видимости переменных
 
Здравствуйте!
У меня Joomla 1.5.15

Создала модуль www/modules/mod_test1/mod_test1.php и там подключаю файл:
require_once("../www/function/cnst.php");

cnst.php:

PHP код:

<?php
$name1
=500;
?>

Переменная $name1, в файле mod_test1.php, не определена.
Пол года назад также подключала модули всё работает до сих пор. а во вновь созданных никак. Почему так?!

Sham 18-02-2011 20:24 1616500

Попробуйте через $GLOBALS['name1'] (фактически может определяться внутри функции/метода - можно об этом не знать, если не видеть скрипт и всю связку инклудов).

zvezda_t 21-02-2011 07:10 1618085

Sham, показываю код файлов полностью.

www\modules\mod_test1 содержит два файла:
1)mod_test1.php
2)mod_test1.xml

www/function содержит файл:
cnst.php

Скрипты:
www/function/cnst.php
PHP код:

<?php
//текущий год
DEFINE('YEAR',date('Y'));

$name1=500;
?>

www\modules\mod_test1\mod_test1.php
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
HTML код:

<?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 1618701

Текст ошибки какой? Стоп может быть на любой строке, включая defined и неправильный путь к cnst.php (лучше сделать абсолютным).

zvezda_t 22-02-2011 07:25 1618856

ошибка:
Цитата:

Notice: Undefined variable: name1 in C:\www\modules\mod_test1\mod_test1.php on line 7


Работает, если объявляю переменные как глобальные. Но почему тогда в других модулях этой же cms!!, те же самые переменные работают, даже если их не объявлять глобальными? ничего не понимаю.

Скрипты:
www/function/cnst.php
PHP код:

<?php
//текущий год
DEFINE('YEAR',date('Y'));

global 
$name1
$name1=500;
?>

www\modules\mod_test1\mod_test1.php
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 1618865

rtm

zvezda_t 22-02-2011 09:37 1618912

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

Sham 23-02-2011 08:34 1619760

Можно предположить, что "require_once("../www/function/cnst.php");" уже стоит где-то раньше, и повторно не вызывается (_once только однажды работает). Попробуйте обычный include (без once). Ну и
Цитата:

Цитата Sham
Попробуйте через $GLOBALS['name1'] »


zvezda_t 24-02-2011 10:46 1620556

Sham, Вы правы:
Цитата:

Цитата Sham
"require_once("../www/function/cnst.php");" уже стоит где-то раньше, и повторно не вызывается »

Оказалось, что на одну страницу я подключила два модуля.
И в обоих делала подключение файла:
"require_once("../www/function/cnst.php");"
Получается, что файл подключился один раз, а область видимости для каждого модуля своя, поэтому переменная была не определена.


ЗЫ Sham, огромное Вам спасибо! Всегда меня выручаете!!!
Разрешите поздравить Вас с Праздником! Нам просто необходимы такие защитники как Вы!
Здоровья, Счастья, Любви и много много радости Вам и вашим близким!

Sham 24-02-2011 11:09 1620576

zvezda_t, Вас также с праздником :) (слово "защитник" не имеет гендерной окраски)

zvezda_t 24-02-2011 11:45 1620601

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


Время: 18:54.

Время: 18:54.
© OSzone.net 2001-