X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> переменные из include
b1f
b1f
Topic Starter сообщение 22.2.2010, 20:03; Ответить: b1f
Сообщение #1


Делаю подгружаемые модули, вот функция.... которая проверяет все папки находящиеся в папке "modules" и файл index.php для каждого модуля, который подгружаеться includе'oм

[PHP]function modlist() {
$url = "modules";
if (is_dir($url)) {
if ($dir = opendir($url)) {
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
if(is_dir($url."/".$file)) {
include ($url."/".$file."/index.php");
if(!file_exists ($url."/".$file."/index.php") ) {
echo "<p>В папке $url/$file/ не найден главный файл.</p>";
}
}
}
}
}
closedir($dir);
}
}[/PHP]

в файде index.php - главной страницы сайта, вызываю эту функцию
[PHP]modlist(); [/PHP]
и в каждом модуле в файле modules/faq/index.php - к примеру
переменная $faq в котором будет содержимое... как ее выдать на главной страницы сайта?
вызов функции
[PHP]echo $faq;[/PHP]
или
[PHP]global $faq;
echo $faq;[/PHP]
не дает никакого результата.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 22.2.2010, 20:12; Ответить: ZhukV
Сообщение #2


Тогда лучше воспользуйся константами, функция define($name,$val), где $name - имя константы, $val - её значение.

[PHP]
define('_ZhukV','freedownload');
//тярям
//парям
//любой код, инклюды
echo _ZhukV
[/PHP]

Этот код те выдаст freedownload

Ноу учти, что повторяющийся имен констант не дожно и приблизительно быть. Также следует знать, що в система апатч, есть сразу некоторые зарезвизированы константы, и есть некоторый глобальные. Короче, ятоб не распминатся, надай им кокого-то унакального названия
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
b1f
b1f
Topic Starter сообщение 22.2.2010, 20:46; Ответить: b1f
Сообщение #3


хорошо спасибо, попробую, а если у меня в константе будут другие переменные или вывод инфы из базы тоесть

$faq = "тут всего может быть";

а потом

define('_ZhukV','$faq');

чтобы вывести потом это нужно

definer('_ZhukV');

чуть что поправьте, просто никогда не пользовался этой функцией ...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
b1f
b1f
Topic Starter сообщение 26.2.2010, 6:00; Ответить: b1f
Сообщение #4


или я настолько ленивый или я незнаю...
вот функция

[PHP]function load_modules() {
$url = "modules";
if (is_dir($url)) {
if ($dir = opendir($url)) {
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
if(is_dir($url."/".$file)) {
$load = $url."/".$file."/index.php";

include ($load);

if(!file_exists ($url."/".$file."/index.php") ) {
echo "<p>В папке $url/$file/ не найден главный файл.</p>";
}
}
}
}
}
closedir($dir);
}
}[/PHP]

подгружаю файл, в котором есть переменная $faq
[PHP]include ($load);[/PHP]

на странице гружу эту функцию...
[PHP]load_modules()[/PHP]

не выводит, если вместо переменой написать просто echo то нормально все.... но мне нужна именно переменная, для того чтобы ее вставить потом в шаблон.

если в ручную на странице инклудить каждый модуль, без функции
[PHP]include ("modules/faq/index.php");[/PHP]
то переменная работает так как нужно, но в ручную каждый модуль прописывать недело... помогите разобрать, дайте совета...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 26.2.2010, 14:49; Ответить: r3ntg3n
Сообщение #5


создай в папке modules файл modules.php, в который запиши массив следующего вида:
[php]$modules_arr = array (
'module_1'=>array('module\'s name', 'path to module\'s files'),
'module_2'=>array('module\'s name', 'path to module\'s files'),
'module_3'=>array('module\'s name', 'path to module\'s files'),
);[/php]в конфиге сайта пропиши:
[php]include("modules/modules.php");
foreach ($modules_arr as $module=>$module_params) {
if (!file_exists($module_params[1])) {
exit ("Error! No files for module ".$module_params[0]."!");
} else {
include_once($module_params[1]);
}
}[/php]в итоге просканишь наличие файлов модуля, если их нету - получишь сообщение, а если есть - проинклудишь модули и сможешь вызывать функции этих модулей.

Но вот если у тебя модули прописаны отдельными классами, то код придется другой писать, соотвественно и функции модулей следует вызывать как методы экземпляра класса модуля.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
b1f
b1f
Topic Starter сообщение 26.2.2010, 20:43; Ответить: b1f
Сообщение #6


тоесть я как понял тут вручную нужно все равно прописывать путь к модулю?
[PHP]$modules_arr = array (
'module_1'=>array('module\'s name', 'path to module\'s files'),
'module_2'=>array('module\'s name', 'path to module\'s files'),
'module_3'=>array('module\'s name', 'path to module\'s files'),
); [/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 27.2.2010, 11:50; Ответить: r3ntg3n
Сообщение #7


ну, можно скриптом просканить папку modules:
[php]chdir($_SERVER['DOCUMENT_ROOT']."/modules/");
$dir = opendir(".");
while (($file = readdir($dir)) != false) {
if (($file != '..') && ($file != '.') && is_dir($file)){
chdir($file);
if (!file_exists("index.php")) {
exit ("ERROR! No index.php file for module $file!");
} else {
require_once ("index.php");
/********************************
* используем require_once так как в том случае,
* если есть ошибка в формировании путя к файлу
* модуля и невозможности подгрузить index.php,
* функция выдаст ошибку и прекратит выполнение скрипта
************************************/
}
}
}[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
b1f
b1f
Topic Starter сообщение 2.3.2010, 21:38; Ответить: b1f
Сообщение #8


спасибо, решил просто сделать не функцией, и вынес в отдельный файл modules.php после подгрузил его

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 25.4.2024, 12:23
Дизайн