Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Последние сообщения
Ответить
1

Теоретический вопрос

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#1
Передо мной стоит задача: Написание модуля создания страниц.

Т.е. допустим есть страницы с новостями; Диалогами и пр. Пользователю нужно создать статическую страницу, к примеру, с контактами. Как сделать подобный модуль? Есть идея запилить папочку pages и в ней создавать php страницы и в static/pages/* ставить html шаблоны страниц. Но как реализовать запиливание страниц php по шаблону там: (<?php $cont = ... ?>;) и выставлять значения переменных в этом шаблоне динамически (после заполнения форм).

Второй вариант: создаю файл: modules/pages/index.php
в GET получаю номер страницы и вывожу соответствующий файл.


Какой из них выбрать?

r00t_san

  • ДиЗиГнЕр
  • Пользователь
  • 169
  • Репутация:11 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#2
Эм, я конечно немного не понял что именно ты хочешь, но разве нельзя сделать таблицу в БД с контентом статическим и выводить его оттуда. Вообщем... я делал так:
Таблица : content:
id, name, rus_name, html, php

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
<?php //подгружаем запрошенную страницу
function getpage()
{
    
$pname $_GET['name'];
    
//если запрос пустой показываем главную
    
if (empty($pname))
        {
            
$pname 'main';
        }
    
//запрос в БД страницу
    
$mainsql mysql_query ("SELECT * FROM content WHERE name='$pname'");
    
$maincon mysql_fetch_array ($mainsql);
    
$num mysql_num_rows ($mainsql);
    
//если есть запись
    
if ($num 0)
    {
        echo 
"<div class=\"n_header\">";
        echo 
"<div class='headtext'>";
        
//ставим язык из сессии
        
if ($_SESSION['lang'] == 'rus')
            {
                echo 
"".$maincon['rus_name']."";
            }
        if (
$_SESSION['lang'] == 'eng')
            {
                echo 
"".$maincon['name']."";
            }
        echo 
"</div>";
        echo 
"</div><div class='context'>";
        
//если отсутствует модуль показываем html страницы
        
if($maincon['php']=='')
            {
                echo(
"<span style='color:#ffffff;'>".$maincon['html']."</span>");
            }
            
//выводим модуль если есть
            
else
            {
                echo 
"<span style='color:#ffffff;'>";
                include (
"".$maincon['php']."");
                echo 
"</span>";
                
//возможность комментить
            
}
            echo 
"</div>";
    }
    
//нет страницы-редиректим на главную
    
else
    {
        echo 
"<script>window.location=\"/\";</script>";
    }
}
?>
в таблице html просто статический текст. в таблице php я ставил если надо подключить модуль, путь до модуля.

Отредактировано автором 14 Июн 2011
Если где то нет чего то значит что то где то есть.

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#3
skad0 пишет:
в GET получаю номер страницы и вывожу соответствующий файл.
примерно так в Фапосе. Этот вариант мне и больше нравится.

Добавлено2011.06.15 00-58

ну вот как r00t_san рассказал, так обычно и делается.

Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#4
Цитата
ну вот как r00t_san рассказал, так обычно и делается.

Лишняя угроза. Если есть возможность удобно обходиться с только файлами, то их и юзаю. Ибо с базой можно упустить моменты, да и зачем грузить базу лишним? Хотя со стороны веса и бекапов, в базе хранить безопасней....

Хотя какая нахуй клиенту разница. Делаю с файлами

Отредактировано автором 15 Июн 2011

Krevedko

  • Атом-мастер
  • Юзер
  • 227
  • Репутация:3 
  • Предупреждения: 0 
  • Регистрация:
    18 Ноя 2010
#5
В принципе, на файлах легко хранить. Но тут не забывай, что файл (если он будет редактируемым) смогут открыть одновременно 2 пользователя. И есть шанс, что они одновременно его сохранят (маленький, маленький, но все же шанс!) и тогда неизвестно к каким последствиям приведет это. В базе же есть очередность и сколько бы запросов к ней не было, они никогда не пересекутся, чего не скажешь о файлах.

И выходит, что хранение в файлах - это тоже
Цитата
Лишняя угроза.

Отредактировано автором 16 Июн 2011

Wasja

  • Истенный Атомовод
  • Юзер
  • 397
  • Репутация:19 
  • Предупреждения: 0 
  • Регистрация:
    11 Ноя 2010
#6
Krevedko пишет:
В принципе, на файлах легко хранить. Но тут не забывай, что файл (если он будет редактируемым) смогут открыть одновременно 2 пользователя. И есть шанс, что они одновременно его сохранят (маленький, маленький, но все же шанс!) и тогда неизвестно к каким последствиям приведет это.
Элементарно решается путем создания объекта, символизирующего о блокировке (например, самый простой вариант - файл, под виндой и линуксом можно семафоры использовать и т.п.). Правда, тогда второй записывающий кусок будет подвисать до тех пор, пока первый не удалит объект блокировки, но это незначительные задержки. Хуже то, что в случае ошибки в программе, если объект блокировки не удалится - никто писать не сможет. :)

Отредактировано автором 16 Июн 2011

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#7
Цитата
объект блокировки не удалится

Эта проблема очень часто встречается. Я все же решил писать базой, ибо впадлу писать класс для работы с файлом) А на базу уже есть готовый

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#8
Скажу что я думаю по этому поводу. Все ИМХО, но тем не менее подкрепленное опытом.

Если инфы мало и она очень часто редактируется, например при каждом обращении к странице сайта, то лучше юзать файлы. Приведу пример такой инфы:
счетчики посещений
кто онлайн
кто просматривает данный форум
временные файлы антидоса, которые создаются при каждом обращении к любой странице
и т.д.

А в базе данных нужно хранить ту инфу, которая относительно редко изменяется и является критической.Критической? Ну да, критической - той которая нужна для сайта и для его работоспособности. Почему же такую информацию лучше хранить в базе? По тому что, если ты сделаешь дамп базы, то у тебя в нем будет вся важная инфа. А если она в файлах, то кроме дампа базы, придется еще постоянно делать дамп файлов.


И я бы не парился о том что будет лишний запрос к базе, в крайнем случае можно поставить кэш и если страница не менялась и есть кэш, то она будет отдаваться из кэша. Если же в кэше ее нет, то сделается запрос к базе и закэшируется, что бы в дальнейшем брать ее из кэша. То есть потери времени особо никакой.

Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)

Krevedko

  • Атом-мастер
  • Юзер
  • 227
  • Репутация:3 
  • Предупреждения: 0 
  • Регистрация:
    18 Ноя 2010
#9
Я тоже очень интересовался нагрузкой на базу данных и выяснил для себя, что она ничтожно мала, по сравнению работы того же Apache в связке с php. У себя (в коэс 1.6 :D) реализовал систему достижений, систему клановой прокачки, новую денежную систему и многое другое. Так вот в секунду идет около 1 запроса от игрока, на 5 серверов это 150 запросов в секунду. Запросы небольшие, вроде TINYTEXT и int(10). И нагрузка на базу выходит просто мизерной: около 2-5% на процессор в пик своей загруженности.

skad0

  • Атом-мозг
  • Юзер
  • 841
  • Репутация:10 
  • Предупреждения: 0 
  • Регистрация:
    2 Окт 2010
#10
В том то и дело, что модуль снипетов и чанков уже реализован. И реализован базой.
Я реализовывал создание статических страниц. Типа контакты и прочая хуетень. Реализовал базой. Адаптация к чанкам и сниппетам затруднений не вызвала. Отшлифую модуль на старой cms и перенесу на новую.

Спасибо всем за помощь

Отредактировано автором 16 Июн 2011
1
Сейчас online: 171. Зарегистрированных: 0. Гостей: 171.