Мой первый самописный движок для сайта

Мой первый самописный движок для сайтаРубрика: Новости -> Разное -> Скрипты
Четверг, 26 апреля 2012 г.
Просмотров: 11691
Настроение: Среднее
В колонках звучит: Savage Garden – Crush And Burn
Подписаться на комментарии по RSS

Не каждый может похвастаться тем что он может написать сайт с нуля))), имеется ввиду все кроме шаблона(стиля оформления) сайта. До недавнего времени со мной все было именно так)), пока у меня не появилась необходимость написать сайт самому))

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

Мой руководитель по практике сказал мне что сайт с использованием готового движка со стандартными шаблонами не прокатит, его никто не оценит и не примут, типа такой сайт не сможет сделать только полный дебил учась на такой специальностиgrin, поэтому она сказала что мне нужно написать сайт с нуля с использованием html, css, javascript, php, а также с использованием базы данных.

Я уже делал сайт по заданию преподавателей на этой же практике, но чисто на html и css, на который я содрал дизайн с какого то другого сайта предварительно почистив его от мусора, лишнего кода в прочего.

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

Для начала я его поделил на 3 части head, body, footer, но в дальнейшем мне пришлось поделить его на 7 частей, просто так удобнее вставлять его в основной файл движка по кускам в нужных местах. Я даже полагаю что именно так и делается повсеместно в различных cms это облегчает основной файл движка и разделяет шаблон от кода.

При написании движка я использовал нерациональные подходы для средних и

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

портал, а всего лишь нужно написать сайт визитку для предприятия.

В качестве базы данных я как и всегда выбрал способ хранения в файлах, а конкретнее я сделал хранение всех данных в 1 файле.

Я решил структурировать файл таким образом, чтобы каждый пост отделялся от предыдущего решетками ###, а внутри решеток данные структурировались собачками @title=,@content=,@rubricat=. Я предусмотрел вариант разделения по типам страниц, так как в шаблоне имеется 2 сайдбара, верхнее меню и главная страница сайта должна ж как то задаваться, можно было сделать как в блогах - на главной странице выводятся отрывки от каждого поста но решил сделать статическую главную страницу. Если у страницы не задать в какой рубрике она будет находиться, то ссылка на нее будет выводится в верхнем меню, если в качестве рубрики написать start, то эта страница будет выводиться главной.

Кстати доработать движок совсем несложно чтобы можно было выбирать между блоговым видом и со статической главной страницей))

В начале я написал что мне нужно было использовать на своем сайте javascript, я это тоже сделал))), оч интересным и совершенно бестолковым способом))), но ведь для меня было главное все технически реализовать, я это и сделал, а именно для всех обычных страниц сайта я подставляю текст и заголовок статьи через javascript, который генерируется с помощью php))).

Ведь действительно ж нафига обычному сайту подставлять через javascript текст в страницу, а мне вот захотелось выпендриться)))

Далее приведу листинг единственного файла с кодом:

<?php
//Прочие переменные
$page = $_GET["id"];//идентификатор статьи
$rubrika = $_GET["rub"];//идентификатор рубрики
$content_openpage;//для контента открытой страницы
$mass_posts[0];//для массива всех данных постов
///
$baza = file_get_contents ( 'baza.txt' );//подключаем базу даных
$posts = explode("###", $baza);//разбиваем по отдельности посты из базы данных
$lenghtarray = count($posts);//счетчик постов в базе данных
for($i=1;$i <= $lenghtarray;$i++)//Заполняем массив всех данных постов
{
    $mass_posts[$i-1] = explode("@", $posts[$i-1]);//разделение по шаблону оджельного поста
    $mass_posts[$i-1][1] = trim(substr($mass_posts[$i-1][1] , 6));//title
    $mass_posts[$i-1][2] = trim(substr($mass_posts[$i-1][2] , 8));//content
    $mass_posts[$i-1][2] = str_replace("\r\n", "<br>", $mass_posts[$i-1][2]);
    $mass_posts[$i-1][3] = trim(substr($mass_posts[$i-1][3] , 9));//rubricat
    if($page == $mass_posts[$i-1][1])//проверяем какая открыта страница и в соответствии выводим контент
    {
        $content_openpage = $mass_posts[$i-1][2];
    }
}
           $aux_res = array() ;
           $result_res = array() ;
         
           foreach ($mass_posts as $key => $value)//создание одномерного массива
           {
                   if($value['3'] != null && $value['3'] != 'start')
                   {
                       $aux_res[$key] = $value['3'] ;
                   }
           }
           $aux_res = array_unique($aux_res) ;
           $count_res=0;//счетчик постов в пересобранном массиве данных с постами
           foreach ($aux_res as $key => $value)//собираем обратно
           {
               $result_res[$count_res] = $mass_posts[$key];
               $count_res++;
           }
$style_head = file_get_contents('style_head');
echo $style_head;//выводим шапку шаблона
//генерируем блок с javascript для автоматической подстановки браузером данных в шаблон
echo'<script type="text/javascript">function onload_complite(){'."\n";
echo'document.getElementById(\'title\').innerHTML = \''.$page."';\n";
echo"document.getElementById('content').innerHTML = \"".addslashes($content_openpage)."\";\n";
echo"\n".'}</script>';
$style_body = file_get_contents('style_body');
echo $style_body;//выводим тело шаблона
for($i=0;$i <= count($mass_posts);$i++)//выводим ссылки в меню на посты без рубрик
{            
    if($mass_posts[$i][3] == null)
    {
        echo'<li>';
        echo'<a href="index.php?id='.$mass_posts[$i][1].'">'.$mass_posts[$i][1]."</a>";
        echo'</li>';
    }
}
$style_body_menu = file_get_contents('style_body_menu');
echo $style_body_menu;//выводим тело шаблона меню
if($page == '')
{    
    if($rubrika != '')
    {
        $b=0;
        for($i=0;$i <= count($mass_posts);$i++)//выводим часть каждой статьи в рубриках
        {    
            if($rubrika == $mass_posts[$i][3])
            {
            if($b >= 5){break;}//ограничение на количество выводимых частей статей в рубрике
            echo'        <div class="topic">';
            echo'            <h1 class="title">';    
            echo'                <a href="index.php?id='.$mass_posts[$i][1].'&rub='.$mass_posts[$i][3].'">'.$mass_posts[$i][1]."</a>";    
            echo'            </h1>';
            echo'            <div id="content2" class="content">';
            echo $mass_posts[$i][2] = trim(substr($mass_posts[$i][2] , 0, 150)).'... <a href="index.php?id='.$mass_posts[$i][1].'&rub='.$mass_posts[$i][3].'">Чиать далее -></a>';
            echo'            </div>';                
            echo'            <ul class="voting  guest ">';
            echo'            </ul>';
            echo'        </div>';
            $b++;
            }
        }
    }else{
            echo'<div class="topic">';
            echo'    <h1 class="title">';
            echo'        Главная страница';
            echo'    </h1>';
            echo'    <div class="content" id="content">';
            for($i=0;$i <= count($mass_posts);$i++)//Выводим главную страницу
            {
                if($mass_posts[$i][3] == 'start')
                {
                    echo$mass_posts[$i][2];
                    break;
                }
            }
            echo'    </div>';                
            echo'</div>';    
        }
}else{
            echo'<div class="topic">';
            echo'    <h1 class="title" id="title"></h1>';
            echo'    <div class="content" id="content">';
            echo'    </div>';                
            echo'</div>';    
    }
$style_body_content = file_get_contents('style_body_content');
echo $style_body_content;//выводим тело шаблона контент
    for($i=1;$i <= count($result_res);$i++)//выводим ссылки на рубрики
    {
        if($i & 1)
        {
               echo'<li class="even">';
        echo'<a href="index.php?rub='.$result_res[$i-1][3].'" class="stream-comment">'.$result_res[$i-1][3]."</a>";
        echo"</li>\n";    
        }
        else
        {
        echo'<li>';
        echo'<a href="index.php?rub='.$result_res[$i-1][3].'" class="stream-comment">'.$result_res[$i-1][3]."</a>";
        echo"</li>\n";
        }
    }
$style_sidebar = file_get_contents('style_sidebar');
echo $style_sidebar;//выводим боковую колонку
if($rubrika != '' || $page != '' && $rubrika != null)
{
    $b=0;
    for($i=0;$i <= count($mass_posts);$i++)//выводим ссылки на посты
    {
        //echo$mass_posts[$i][3];
        if($rubrika == $mass_posts[$i][3])
        {
            if($b & 1)
            {
                   echo'<li class="even">';
            echo'<a href="index.php?id='.$mass_posts[$i][1].'&rub='.$mass_posts[$i][3].'" class="stream-comment">'.$mass_posts[$i][1]."</a>";
            echo"</li>\n";    
            }
            else
            {
            echo'<li>';
            echo'<a href="index.php?id='.$mass_posts[$i][1].'&rub='.$mass_posts[$i][3].'" class="stream-comment">'.$mass_posts[$i][1]."</a>";
            echo"</li>\n";
            }
            $b++;
        }
    }
}
$style_sidebar2 = file_get_contents('style_sidebar2');
echo $style_sidebar2;//выводим 2 боковую колонку
$style_footer = file_get_contents('style_footer');
echo $style_footer;//выводим подвал шаблона
?>
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Комментариев: 6

  1. 2012-10-11 в 21:44:54 | Дмитрий

    Зачем использовать файл в качестве базы данных? Почему бы не взять к примеру МайСКУл?

  2. Да все просто, на момент написания движка я не умел работать с базами данных mysql, да и я хотел сделать простой и быстрый движок, а с mysql он будет немного медленнее))).

  3. Автор вы идиот если думаете, что ваш говнокод:

    for($i=1;$i <= $lenghtarray;$i++)//Заполняем массив всех данных постов
    {
        $mass_posts[$i-1] = explode("@", $posts[$i-1]);//разделение по шаблону оджельного поста
        $mass_posts[$i-1][1] = trim(substr($mass_posts[$i-1][1] , 6));//title
        $mass_posts[$i-1][2] = trim(substr($mass_posts[$i-1][2] , 8));//content
        $mass_posts[$i-1][2] = str_replace("\r\n", "
    ", $mass_posts[$i-1][2]);
        $mass_posts[$i-1][3] = trim(substr($mass_posts[$i-1][3] , 9));//rubricat

    Будет работать быстрее чем мускул

  4. Acidua, да я и не спорю что я идиот и мой код - говнокод. Но ты не понимаешь одной детали, а именно то, что движок писался под конкретные задачи. Он будет работать медленнее, если на сайте будет скажем 2000страниц, и он будет отъедать оперативку бесщадно, но если на сайте будет 15 страниц то тут сравнивать нет смысла. Если б ты почитал внимательней, то понел что мне пофигу было на производительность в целом, я писал как задание по практике, сайт 12-15 страниц на php.

  5. Тоиди Acidua, хотелось бы увидеть ваши первые шаги программирования и только не говорите что у вас всё сразу получалось и вы не делали подобных глупостей, если не подобных так других подобных глупостей. Кто то учиться на своих кто то на чужих, но учащийся на чужих не означает отсутствие ошибок совсем.

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

    Всем удачи и добра навсегда)))

  6. 2018-12-20 в 17:42:28 | rezident81@inbox

    а как в шапке прописать название сайта?

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

(войти без комментирования)

Имя и сайт используются только при регистрации

Если указать email (зарегистрироваться), то будет уведомление о новых комментариях.

Выберите человечка с поднятой рукой!