Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP для продвинутых.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
12.54 Mб
Скачать

Мы можем использовать любые строковые функции php, добавляя к ним класс utf8

UTF8. Листинг 12.21

Использование строковых функций

$str = UTF8::ltrim($str);

$length = UTF8::strlen($str);

$position = UTF8::strpos($str, $search);

Upload

Upload. Листинг 12.22

Сохранить загруженный файл:

$array = Upload::save($_FILES[‘file’]);

Проверка типа загруженных данных:

$array->rule(‘file’, ‘Upload::type’, array(array(‘jpg’, ‘png’)));

Проверка размера загруженных данных:

$array->rule(‘file’, ‘Upload::size’, array(‘1M’));

Проверка на то, не пустой ли файл:

$array->rule(‘file’, ‘Upload::not_empty’);

Вернет TRUE, если все проверки прошли успешно:

$array->check();

13. Этапы создания проекта

  1. В файле bootstrap.php настроим роутинг по-умолчанию.

    Настройка роутов. Листинг 13.1

    Route::set(‘default’, ‘(<controller>(/<action>(/<stuff>)))’, array(‘stuff’ =>‘.*’))

    ->defaults(array(

    ‘controller’ =>‘index’,

    ‘action’ =>‘index’,

    ));

  2. В папке config создадим файл settings.php

    Конфигурационный файл. Листинг 13.2

    <?php defined(‘SYSPATH’) or die(‘No direct script access.’);

    /*

    * Настройки сайта

    */

    return array(

    site’ => array(

    name =>‘Разработка сайтов’,

    description =>‘Делаю сайты, порталы, программы для интернета и обучаю web-программиованию.’,

    title =>‘WEB-мастер предлагает свои услуги по разработке сайтов, порталов и обучению web-программирования.’,

    ),

    );

  3. В папке classes/controller создадим файл base.php, в котором спроектируем базовый контроллер, от которого будут наследоваться все остальные контроллеры.

    Базовый контроллер. Листинг 13.3

    <?php defined(‘SYSPATH’) or die(‘No direct script access.’);

    /*

    * Общий базовый класс

    */

    class Controller_Base extends Controller_Template {

    //определение шаблона по-умолчанию

    public $template = ‘v_base’;

    public function before() {

    parent::before();

    // Подключение конфигурационного файла settings.php

    $config = Kohana::$config->load(‘settings’);

    // Передача переменных в шаблон

    $this->template->site_name = $config[‘site’][‘name’];

    $this->template->site_description = $config[‘site’][‘description’];

    $this->template->site_title = $config[‘site’][‘title’];

    // Подключаем стили и скрипты

    $this->template->styles = array(‘media/css/style.css’);

    $this->template->scripts = array(‘media/js/footer.js’);

    // Подключаем блоки

    $this->template->block_left = null;

    $this->template->block_center = null;

    $this->template->block_right = null;

    }

    }

  4. Создадим базовый шаблон v_base.php в папке views. Сейчас обратите внимание на выделенные конструкции if и foreach. Первая конструкция if (isset($block_left)) проверяет, существует ли переменная $block_left. Если данная переменная существует (в нашем случае это массив, определяемый в контроллере), то проходимся foreach-ем по каждому элементу массива, выводим на экран индекс массива и значения из модели.

    Базовый шаблонv_base.php. Листинг 13.4

    <!DOCTYPE>

    <html>

    <head>

    <scriptsrc="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>

    <title><?=$site_name?> | <?=$site_title?></title>

    <meta content="text/html; charset=utf8" http-equiv="content-type">

    <?foreach ($styles as $file_style):?>

    <?=html::style($file_style)?>

    <?endforeach?>

    <?foreach ($scripts as $file_script):?>

    <?=html::script($file_script)?>

    <?endforeach?>

    </head>

    <body>

    <div class="menu">меню сайта</div>

    <div class="main_line">

    <div class="bigtext"><? echo $site_name?></div>

    <p><? echo $site_description."<br />" ?><p>

    </div>

    <div id="content">

    <? if (isset($block_left)):?>

    <div class="block_left">

    <?foreach ($block_left as $index_left => $left):?>

    <?=$index_left?>

    <?foreach ($left as $left_small):?>

    <div class="block_left_top"><a href=‘#’><?=$left_small; ?></a></div>

    <?endforeach?>

    <?endforeach?>

    </div>

    <?endif?>

    <? if (isset($block_right)):?>

    <div class="block_right">

    <?foreach ($block_right as $index_right => $right):?>

    <?=$index_right?>

    <?foreach ($right as $right_small):?>

    <div class="block_right_top"><a href=‘#’><?=$right_small; ?></a></div>

    <?endforeach?>

    <?endforeach?>

    </div>

    <?endif?>

    <?= $block_center; ?>

    </div>

    <div class="footer">

    <a href="http://mikhalkevich.colony.by">разработка сайтов под ключ</a>

    </div>

    </body>

    </html>

  5. В папке classes/model создадим модели для хранения данных. Позже, в моделях, мы будем хранить значения из базы данных. Пока же ограничимся массивом с данными.

    Модель text (файл text.php). Листинг 13.5

    <?phpdefined(‘SYSPATH’) ordie(‘No direct script access.’);

    classModel_TextextendsModel {

    // Все новости

    public function all_text()

    {

    returnarray(

    ‘about’ =>‘Разработка сайтов под ключ’,

    ‘contact’ =>‘Михалькевич Александр Викторович, МТС 8(029)763-93-82’,

    ‘portfolio’ =>‘Здесь будет мое портфолио’,

    );

    }

    }

    Модель menu (файл menu.php). Листинг 13.6

    <?php defined(‘SYSPATH’) or die(‘No direct script access.’);

    class Model_Menu extends Model {

    // Все новости

    public function all_leftmenu()

    {

    returnarray(

    ‘Статьи’ =>‘Тут мои статьи’,

    ‘Книги’ =>‘Тут мои книги’,

    ‘Сайты’ =>‘Тут мои сайты’,

    ‘Блог’ =>‘Тут мой блог’,

    ‘Дневник’ =>‘Тут мой дневник’,

    );

    }

    public function all_leftmenu2()

    {

    return array(

    ‘Link1’ =>‘Тут что-то еще’,

    ‘Link2’ =>‘Тут что-то еще’,

    );

    }

    }

  6. После того, как базовый контроллер, основной шаблон, модель и файл настроек создан, можно приступить к проектированию страниц. Все остальные контроллеры у нас будут наследоваться от Controller_Base. Начнем с индексной страницы.

    Контороллеры экшн для главной страницы (файл index.php). Листинг 13.7

    <?php defined(‘SYSPATH’) or die(‘No direct script access.’);

    /*

    * Базовый класс главной страницы

    */

    class Controller_Index extends Controller_Base {

    public function before() {

    parent::before();

    }

    public function action_index() {

    // Получаем данные из модели

    $products = Model::factory(‘text’)->all_text();

    $leftmenu = Model::factory(‘menu’)->all_leftmenu();

    $leftmenu2 = Model::factory(‘menu’)->all_leftmenu2();

    $content = View::factory(‘v_center’, array(

    ‘products’ => $products,

    ));

    // Вывод в шаблон

    $this->template->block_left = array("Раздел" => $leftmenu, "Ссылки" => $leftmenu2);

    $this->template->block_center = $content;

    $this->template->block_right = array("Раздел справа" => $leftmenu2);

    }

    }

  7. В папку views cоздадим дополнительные элементы шаблона: v_center.php - для центрального блока.

    v_center.php. Листинг 13.8

    <div class="block_center">

    <?foreach($products as $url => $prod):?>

    <?=$url?> - <?=$prod?><br />

    <?endforeach?>

    </div>

  8. В папке media/css создадим файл style.css (который подключается у нас в базовом контроллере). Обратите внимание на стили для тэга #content. Здесь мы зафиксировали минимальную ширину, до которой будет сужаться страница (700px). При дальнейшем уменьшении страницы будет появляться ползунок.

    Стили для сайта style.css. Листинг 13.9

    body {

    padding:0px;

    margin:0px;

    background:#F4F5EB;

    color: #333333;

    font-size:13px;

    font-family:arial;

    }

    #content {min-width: 700px; max-width: 100%; width:expression((document.documentElement.clientWidth||document.body.clientWidth)<700?’700px’:(document.body.clientWidth> 1000? "100%": "auto")); margin: 0 auto; text-align: left;}

    .main_line {

    background:#E3E3D6;

    padding:33px;

    }

    .menu {

    text-align:center;

    padding:10px;

    }

    .bigtext {

    font-size:22px;

    font-weight:bold;

    }

    .block_left {

    float:left;

    width:200px;

    padding:7px;

    }

    .block_right {

    float:right;

    padding:7px;

    width:200px;

    }

    .block_center {

    margin-left:214px;

    }

    .block_right_top {

    font-weight:bold;

    text-align:center

    }

    .block_left_top {

    font-weight:bold;

    text-align:center

    }

    .footer {

    text-align:center;

    width:100%;

    }

    .footer a {

    line-height:43px;

    }

  9. В базовом контроллере, помимо стилей, мы подключали скрипт footer.js, задача которого держать footer всегда внизу страницы. Вот он:

    Скрипт footer.js. Листинг 13.10

    $(function(){

    $(window).bind("load", function() {

    var footerHeight = 0,

    footerTop = 0,

    $footer = $(".footer");

    positionFooter();

    function positionFooter() {

    footerHeight = $footer.height();

    footerTop = ($(window).scrollTop()+$(window).height()-footerHeight)+"px";

    if ( ($(document.body).height()+footerHeight) <$(window).height()) {

    $footer.css({

    position: "absolute"

    }).animate({

    top: footerTop

    })

    } else {

    $footer.css({

    position: "static"

    })

    }

    }

    $(window)

    .scroll(positionFooter)

    .resize(positionFooter)

    });

    });

  10. Если мы все правильно сделали, то должны увидеть следующую страницу:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]