<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"  href="/xslt/final.xslt"?><html>
  <head>
    <title>Codeigniter  Step0: Собираем стенд для дальнейших экспериментов.</title>
    <meta name="css" content=""/>
    <meta name="js" content=""/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="id" content="12"/>
    <link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml"/>
  </head>
  <body>
    <div class="main">
      <div class="wrap">
        <div class="L">
          <h1><a href="/">..</a> / Codeigniter  Step0: Собираем стенд для дальнейших экспериментов.</h1>
          <ol class="tags big"/>
          <div class="myContent"><div style="float: right;"><em>Долгая прелюдия, потаенное осознанное внимание <br/>
к эволюции женского возбуждения - все это необходимые <br/>
компоненты успешной любовной игры.</em> <br/>
<div align="right">«Культ энергии оргазма» Т.Клири</div>
</div>
<h2 style="clear: both;">Прелюдия</h2>
<p>Для того чтобы двигаться дальше все предыдущие наработки не подходят. Много лишнего. Сделаем самую простую заготовку  блога, в которой будет только отображение статей и возможность их ввода и редактирования.  Для большего пафоса назовем это "Codeigniter CMS Embrio "™</p>
<p>Все тексты заготовки сложем в архив.  А после этого будет как в известной школе танцев  "шаг вперед и поворот". <br/>
<br/>
Практически коды повторяют  предыдущий выпуск "<a href="/tags/codeigniter-blog/">Codeigniter Blog шаг за шагом</a>", поэтому комментарии будут минимальными.  Все исходники как обычно складываем в архив, который можно скачать <a href="/doc/ci2.zip">здесь</a> (в директории step0)</p>
<div>
<h2>1. Разворачиваем дистрибутив</h2>
</div>
<p>Дистрибутив берем  <a href="#" title="codeigniter.com/" rel="nofollow" class="external">на официальном сайте </a>  разархивируем и копируем содержимое директории  Codeigniter_N.N.N   в корневую директорию сайта.</p>
<h2>2. Правим конфигурационные файлы</h2>
<p>Все конфигурационные файлы лежат в директории /system/aplication/config поочередно правим:</p>
<ul>
    <li><strong>config.php</strong><br/>
    <br/>
    $config['base_url']    = "/";  // сюда  скинул проект<br/>
    $config['index_page'] = "";  // сбросим правило умолчания CI</li>
    <li><strong>database.php</strong> <br/>
    <br/>
    Находим строки отвечающие за соединение с БД:<br/>
    $db['default']['hostname'] = "localhost"; <br/>
    $db['default']['username'] = "root";  // логин БД<br/>
    $db['default']['password'] = ""; // пароль БД<br/>
    $db['default']['database'] = "c3"; // название базы данных</li>
    <li><strong>autoload.php</strong><br/>
    <br/>
    Находим строки отвечающие за подгрузку библиотек и хелперов<br/>
    $autoload['libraries'] = array('database','parser');<br/>
    $autoload['helper'] = array('url');</li>
    <li><strong>rootes.php</strong><br/>
    <br/>
    $route['default_controller'] = "blog";</li>
</ul>
<h2>3. Настраиваем htaccess</h2>
<p>Текст .htaccess:</p>

<table class="code">
    <tbody>
        <tr>
            <td><!--php-->
            <pre class="brush: plain">Options +FollowSymLinks
            Options -Indexes
            DirectoryIndex index.php
            RewriteEngine on
            RewriteCond $1 !^(index\.php)
            RewriteCond %{REQUEST_URI} !\.(css¦js¦jpg¦gif)$
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ index.php/$1 [L,QSA]</pre><!--/php--></td>
        </tr>
    </tbody>
</table>
<h2>4. Создаем БД</h2>

<table class="code">
    <tbody>
        <tr>
            <td><!--php-->
            <pre class="brush: plain">CREATE TABLE entries (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
title VARCHAR( 255 ) NOT NULL ,
author VARCHAR( 255 ) NOT NULL ,
mail VARCHAR( 255 ) NOT NULL ,
anounce TEXT NOT NULL ,
content TEXT NOT NULL
) ENGINE = MYISAM ;
INSERT INTO entries (title,content,anounce,mail,author) VALUES ('Text1', 'Text1 Text1 Text1', 'Anounce1 ','info@mail.ru','Zalkind');
INSERT INTO entries (title,content,anounce,mail,author) VALUES ('Text2', 'Text2 Text2 Text2', 'Anounce2 ','info@mail.ru','Zalkind');
INSERT INTO entries (title,content,anounce,mail,author) VALUES ('Text3', 'Text3 Text3 Text3', 'Anounce3 ','info@mail.ru','Zalkind');
INSERT INTO entries (title,content,anounce,mail,author) VALUES ('Text4', 'Text4 Text4 Text4', 'Anounce4 ','info@mail.ru','Zalkind');
INSERT INTO entries (title,content,anounce,mail,author) VALUES ('Text5', 'Text5 Text5 Text5', 'Anounce5 ','info@mail.ru','Zalkind');
INSERT INTO entries (title,content,anounce,mail,author) VALUES ('Text6', 'Text6 Text6 Text6', 'Anounce6 ','info@mail.ru','Zalkind');</pre><!--/php--></td>
        </tr>
    </tbody>
</table>
<p><span class="syntax"><br/>
</span></p>
<h2><span class="syntax">5. Создаем Модель</span></h2>
<p>В прошлый раз, следуя дурной традиции авторов <a href="#" title="codeigniter.com/tutorials/" rel="nofollow" class="external">CI туториала</a>, обходились без модели. Для Codeigniter, который с самого начала задумывался в концкпции Модель-Вьюер-Контроллер (<a href="#" title="ru.wikipedia.org/wiki/MVC" rel="nofollow" class="external">MVC</a>).</p>
<p>Теперь мы как порядочные создадим модель, которая выполняет основные операции с БД - выборку и модификацию данных.  На удалении и вставке данных сэкономим.  Модель в файле S:\system\application\models\mblog:</p>

<table class="code">
    <tbody>
        <tr>
            <td><!--php-->
            <pre class="brush: plain">&lt;?php
            class Mblog extends Model {

             var $data=Array();

             function Mblog()
                {
                    parent::Model();
                }
             function getAll()
                {
                    $query = $this-&gt;          db-&gt;          get('entries');
                    return $query-&gt;          result_array();
                }
             function getOne($id)
                {
                    $query = $this-&gt;          db-&gt;          getwhere('entries', array('id' =&gt;           $id))-&gt;          result_array();
                    return $query[0];
                }
             function update()
                {
                    $this-&gt;          db-&gt;          update('entries', $this-&gt;          data, "id = ".$this-&gt;          data['id']);
                }
            }
?&gt;          </pre><!--/php--></td>
        </tr>
    </tbody>
</table>
<h2>6. Создаем контроллер</h2>
<p>В отличие от серии "<a href="#" title="erum.ru/tags/codeigniter-blog" rel="nofollow" class="external">Codeigniter Шаг за шагом</a>" контроллер  все операции по выборке и модификации данных  выполняет через обращение к модели. Контроллер в файле S:\system\application\controllers\blog.php:</p>

<table class="code">
    <tbody>
        <tr>
            <td><!--php-->
            <pre class="brush: plain">&lt;?php

            class Blog extends Controller {

              function Blog()
                {
                    parent::Controller();
                    $this-&gt;          load-&gt;          model('mblog');
                }
              function index()
                {
                    $data['entries'] = $this-&gt;          mblog-&gt;          getAll();
                    $this-&gt;          parser-&gt;          parse('index.php',$data);
                }
              function view()
                {
                    $id=$this-&gt;          uri-&gt;          segment(3);
                    $this-&gt;          parser-&gt;          parse('one.php',$this-&gt;          mblog-&gt;          getOne($id));
                }
              function edit()
                {
                   $id=$this-&gt;          uri-&gt;          segment(3);
                   $this-&gt;          parser-&gt;          parse('edit.php',$this-&gt;          mblog-&gt;          getOne($id));
                }
              function save()
                {
                    $this-&gt;          mblog-&gt;          data=$_POST;
                    $this-&gt;          mblog-&gt;          update();
                    $this-&gt;          view();
                }
}?&gt;          </pre><!--/php--></td>
        </tr>
    </tbody>
</table>
<h2>7. Создаем вьюеры (views)</h2>
<p>Во вьюерах я использую класс темплейтов Codeigniter.  Для базовой заготовки их нужно три:</p>
<ul>
    <li><strong>вьюер ленты</strong>  S:\system\application\views\index.php:<br/>
    <br/>
    
<table class="code">
        <tbody>
            <tr>
                <td><!--php-->
                <pre class="brush: plain">&lt;html&gt;
&lt;head&gt;          &lt;link rel="stylesheet" href="/css.css" type="text/css" /&gt;          &lt;/head&gt;      
&lt;body&gt;      
{entries}
&lt;div class="entries"&gt;      
   &lt;h1&gt;          {title}&lt;/h1&gt;      
   &lt;div class="content"&gt;           { anounce } &lt;/div&gt;      
    &lt;a  class="right" href="/blog/view/{id}"&gt;          more&lt;/a&gt;      
&lt;/div&gt;      
{/entries}
&lt;/body&gt;      
&lt;/html&gt;          </pre><!--/php--></td>
            </tr>
        </tbody>
    </table>
    </li>
    <li><strong>вьюер отдельной записи</strong>  S:\system\application\views\one.php:<br/>
    <br/>
    
<table class="code">
        <tbody>
            <tr>
                <td><!--php-->
                <pre class="brush: plain">&lt;html&gt;
&lt;head&gt;          &lt;link rel="stylesheet" href="/css.css" type="text/css" /&gt;          &lt;/head&gt;      
&lt;body&gt;      
&lt;div class="entries"&gt;      
   &lt;h1&gt;          {title}&lt;/h1&gt;      
   &lt;div class="content"&gt;          {content}&lt;/div&gt;      
   &lt;a class="right" href="mailto:{mail}"&gt;          {author}&lt;/a&gt;      
   &lt;a class="home" href="/"&gt;          Home&lt;/a&gt;      
  
&lt;a class="home" href="/blog/edit/{id}"&gt;          Edit&lt;/a&gt;      
&lt;/div&gt;      
&lt;/body&gt;      
&lt;/html&gt;          </pre><!--/php--></td>
            </tr>
        </tbody>
    </table>
    </li>
    <li><strong>вьюер редактирования</strong>:  S:\system\application\views\edit.php:<br/>
    <br/>
    
<table class="code">
        <tbody>
            <tr>
                <td><!--php-->
                <pre class="brush: plain">&lt;html &gt;
&lt;head&gt;          &lt;link rel="stylesheet" href="/css.css" type="text/css" /&gt;          &lt;/head&gt;      
&lt;body&gt;      
&lt;div class="entries"&gt;      
&lt;form action="/blog/save/{id}" method="post"&gt;      
&lt;input type="hidden" name="id" value="{id}"/&gt;      
Title
&lt;input type="text" name="title" value="{title}"/&gt;      
Author
&lt;input type="text" name="author" value="{author}" /&gt;      
Mail
&lt;input type="text" name="mail" value="{mail}" /&gt;      
Anounce
&lt;textarea name="anounce"&gt;       { anonunce }  &lt;/textarea&gt;      
Text
&lt;textarea name="content"&gt;          {content}&lt;/textarea&gt;      
&lt;input type="submit" class="submit"/&gt;      
&lt;/form&gt;      
&lt;/div&gt;      
&lt;/body&gt;      
&lt;/html&gt;          </pre><!--/php--></td>
            </tr>
        </tbody>
    </table>
    </li>
    <li><strong>для красоты</strong> создаем стилевую таблицу css.css  в корневой диретории</li>
</ul>
<h2>8.  THE END</h2>
<p>Все исходники можно взять <a href="/doc/ci2.zip">здесь</a> ( директория step0 архива). На этом прелюдия закончена, далее можно перейти непосредственно к  процессу.</p></div>
          <ol class="tags big">
            <li class="date">2007-09-03</li>
          </ol>
          <ol class="see">
            <li>
              <a href="#"><span>erum.ru/tags/codeigniter-blog</span> - <b>Codeigniter Шаг за Шагом. Туториал по созданию примитивного блога на CI</b></a>
            </li>
          </ol>
          <ul class="comment">
            <li id="a210" title="a0">
              <a name="Dev" title="" rel="30.12.08"/>
              <div>Когда читал первые статьи,и там так было сказано про модель что там когда нибудь в дальнейшем будем её использовать...Ну как не понравилось ибо это один из составляющих данного паттерна. По сути можно на это и забить,но мне кажется это лишь изменит представление читателя. А так вообщем, всё отлично всё прибрано и собранно,спасибо огромнейшее автору блога:)</div>
            </li>
            <li id="a211" title="a210">
              <a name="&#x418;&#x441;&#x430;&#x430;&#x43A; &#x422;&#x44B;&#x43D;&#x433;&#x44B;&#x43B;&#x447;&#x430;&#x432;" title="erum.ru" rel="31.12.08"/>
              <div>Спасибо. <br/>Надо бы конечно внести правки в исходные тексты, но для себя я закрыл тему CI. Во-первых, потому что основы я где-то как-то разбрал, а во-вторых -  в Рунете появилось достаточно большое CI-комьюнити <a title="http://www.code-igniter.ru/forum/" rel="nofollow" class="external" href="#">ссылка</a></div>
            </li>
            <li id="a247" title="a211">
              <a name="Vasiliy" title="fp83rb.ya.ru" rel="03.03.09"/>
              <div>Сообщество то есть, но "живые" примеры намноооого лучше <br/>и ссылка на ваш блог с сообщества ру тоже существует ... не убивайте проект</div>
            </li>
            <li id="a248" title="a247">
              <a name="&#x418;&#x441;&#x430;&#x43A;&#x43A; &#x422;&#x44B;&#x43D;&#x433;&#x44B;&#x43B;&#x447;&#x430;&#x432;" title="erum.ru" rel="03.03.09"/>
              <div>Убивать не собираюсь, но и развивать не обещаю. У меня много проектов. Есть намного более приоритетные.</div>
            </li>
            <li id="a261" title="a248">
              <a name="&#x42E;&#x440;&#x438;&#x439;" title="" rel="24.03.09"/>
              <div>Развивай блог :) у тебя обалденный статьи. Будет очень жалко если все это загнеться.</div>
            </li>
            <li id="a422" title="a0">
              <a name="&#x41D;&#x430;&#x43A;&#x443;&#x43A;&#x440;&#x44B;&#x441;&#x43A;&#x438;&#x43D;" title="live.progger.ru" rel="25.12.09"/>
              <div>Можно ли из вьювса вызывать функцию модели?<br/>Т.е.мне надо в отображении вызвать функцию func из модели model. Я подключил $this-&gt;load-&gt;model('Model');<br/>, вызываю $this-&gt;Model-&gt;func($par); но оно соответственно не работает.</div>
            </li>
            <li id="a423" title="a422">
              <a name="&#x418;&#x441;&#x430;&#x430;&#x43A; &#x422;&#x44B;&#x43D;&#x433;&#x44B;&#x43B;&#x447;&#x430;&#x432;" title="erum" rel="26.12.09"/>
              <div>Не знаю. Наверное, можно. Но весь смысл View в MVC в том чтобы не тягать из нее методы модели или контроллера, а переводить полученные из Controller данные в окончательный вид (HTML, XML, json etc).</div>
            </li>
            <li id="a450" title="a0">
              <a name="&#x421;&#x435;&#x440;&#x433;&#x435;&#x439;" title="" rel="17.02.10"/>
              <div>Никак не могу разобраться с ссылками.  На удалённом сервере отображается только главная страница, а переход по ссылкам возвращает обратно на сайт. В чём может быть проблема?</div>
            </li>
          </ul>
        </div>
      </div>
      <div class="R">
        <a href="/" title="&#x41D;&#x430; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x443;&#x44E;"/>
      </div>
    </div>
    <div id="li"/>
  </body>
</html>

