Перейти к содержимому



Подключение дополнительных модулей

#1 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0
0

Отправлено 01 Июнь 2009 - 23:42

Надоело уже каждый раз переделывать один и тот же код под разные сайты. Решил сделать небольшой движок для сайтов визиток к которому будут подключаться модули Гостевая книга, опросник и т.д.

Решение я нашел)) но очень не хорошее.

Для движка написаны скрипты. А в админ панели при создании страницы в поле "Модули" нужно вписать путь к скрипту.
И при выводе страницы проверяется есть ли подключенный модуль, если естьь то include "гостеваякнига.php";

Хотелось бы услышать принцип как это делается на самом деле, а если еще и с кодом для наглядности, то вообще было бы отлично.

 

 

  • 0

#2 v1ex

v1ex
  • Пользователь
  • 225 сообщений
  • Репутация: 0

Отправлено 02 Июнь 2009 - 09:17

Решение я нашел)) но очень не хорошее.

Почему, же? Можно начать с такого...

Ну самое просто, что я могу предложить, это примерно так:
index.php:
<?php
// Подключение файлов
require_once 'functions.php';

// Модуль по умолчанию
$module = 'index';

if (isset($_GET['module'])) {
$module_tmp = trim($_GET['module']);
if (preg_match("/^[a-z0-9_]+$/i", $module_tmp)) {
$module = $module_tmp;
}
else {
die('Ошибка');
}
}

if (file_exists('modules/' .$module. '/module.php'))
{
require_once 'modules/' .$module. '/module.php';
}
else
{
die('Ошибка');
}
?>

modules/guest/module.php (модуль гостевой):
<?php
// Допустим это модуль гостевой книги

// Заголовок
$template['title'] = 'Гостевая книга';
// Якобы динамическая генерация контента
$template['messages'] = 'Сообщения гостевой книги';
$template['xz'] = 'Еще, какой нить контент...';

// Отобразить шаблон (в template переменные шаблона)
display_template('header.tpl', $template);
display_template('guest.tpl', $template);
display_template('footer.tpl', $template);
?>

functions.php (функция для наипростейшего шаблонизатора):
<?php
  function display_template($file, $template)
  {
	require_once $file;
  }
?>
header.tpl, guest.tpl, footer.tpl:
<html>
<head>
<title><?php print $template['title']; ?></title>
</head>
<body>

--------------------------

<h1>Сообщения</h1>
<?php print $template['messages']; ?>
<h2>Еще что-то</h2>
<?php print $template['xz']; ?>

-----------------------


<div>Copyright 2009</div>
</body>
</html>

  • 0

#3 Евгений

Евгений
    Topic Starter
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 02 Июнь 2009 - 09:34

не ожидал услышать столь развернутый ответ)))) Кажется тут же и ответ на другой мой вопрос (про шаблонизатор).
Щас вот закончу один свой проект и надо будет обмозговать информацию :)
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 02 Июнь 2009 - 13:50

Евгений, шаблонизатора тут как такового нету. :)
  • 0

#5 v1ex

v1ex
  • Пользователь
  • 225 сообщений
  • Репутация: 0

Отправлено 02 Июнь 2009 - 14:25

Согласен. Но я и не вижу смысла делать "навороченный" шаблонизатор. Какая разница будем ли мы парсить документ, и заменять конструкции шаблонизатора на тект, или сразу обрабатывать PHP код? Тот-же смарти, делает три лишних шага. Из тех же своих конструкций, он делает PHP код, сохраняет его, а потом выводит его? Зачем? Только не надо говорить, что бы "не программист", мог натянуть шабло... Там те же, условные, циклические конструкции и т.п., с которыми "не программист" просто не сможет разобраться... А PHP - код это удобнее, сделать поддержку хуков и вообще отлично...
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 02 Июнь 2009 - 16:30

v1ex, не отрицаю :)
  • 0

#7 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 28 Август 2009 - 14:18

$index = array(
"title" => $module_title,
"module" => module_create($_GET['module']),
"bottom_block" => "Нижний центральный блок",
"copyright" => $config['copyright'],
);
$html .= parseTpl("templates/{$config['main_tpl']}/index.tpl", $index);


Каким образом сделать, чтобы модуль загружался в шаблон?? В то место, куда надо? Иначе просто
require_once загружает его в самом начале.

function module_create($module) {
if (isset($_GET['module'])) {
$module_tmp = trim($_GET['module']);
if (preg_match("/^[a-z0-9_]+$/i", $module_tmp)) {
$module = $module_tmp;
}
else {
die('Ошибка');
}
} else {$module = "Content";}

if (file_exists('modules/' .$module. '/index.php'))
{
$module_load = require_once ('modules/' .$module. '/index.php');
}
else
{
die('Указанный модуль не найден');
}
}

  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 29 Август 2009 - 22:36

gaaarfild, ничего не понятно... хотя может ты имеешь ввиду функцию
file_get_contents() или же тебе надо использовать eval, что не очень корректно. Обычный require_once никогда тебе не вернёт интерпритированного содержимого, это вставка кода...
  • 0

#9 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 01 Сентябрь 2009 - 21:15

Ну каким образом организуется загрузка модуля в шаблонизатор, если использовать твой вариант простейшего шаблонизатора?
  • 0

#10 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 03 Сентябрь 2009 - 02:10

gaaarfild, что в твоём понимании модуль?
Я в данном шаблонизаторе подключал только HTML вставку (шаблон с включениями). Все логические операции и различные итерации вынесены за пределы шаблона.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru