Написание Pegas CMS на Kohana 3.3 — Вводная

default
Всем привет )
Сегодня у нас будет вводная статья по написанию CMS на фреймворке Kohana 3.3
Сегодня мы будем заниматься:
1. Подготовительная работа
2. Созданием структуры папок
3. Настройкой Boostrap

1. Подготовительная работа
Я предполагаю что локальный сервер у вас уже установлен (Denwer or Topserver or Xampp) ,у меня стоит Xampp.
Вы скачали последнею версию на данный момент Kohana v3.3.1 «peregrinus» stable с сайта http://kohanaframework.org/download
После того как ее распаковали у вас по адресу http://pegascms.localhost/install все горит зеленым ,ну почти все )
Вы удалили install.php
Перейдя по адресу лок.сайта вы видите баян в виде «Hello World».

2. Создание структуры папок
Файловая структура у нас будет немного отличаться ,появятся новые папки ,некоторые папки для удобства мы переименуем.
Вид корня:
Папки->->
+ app — папка нашего приложения где мы будем говнокодить на зависть индусам,в которой мы будем наследовать базовые классы ,расширять или изменять их функционал ,создавать свои собственные классы и контроллеры которые нам понадобятся для работы ,вести первоначальная настройку работу всей CMS
+ modules — папка с модулями ,системными ,и нашими ,мы будем разделять отдельные части сайта на различные модули к примеру пользовательскую часть модуль User ,Новости и т.д
+ system — системная папка фреймворка ,в нее мы будем только подглядывать ,говорят что если там внести изменения то грозит проклятие.
+ themes — папка с нашими шаблонами ,темами оформления ,иконками ,картинками ,js ,css и прочей ересью угодной дизайнерам. Вынес в отдельную папку для удобства ,возможно что это не совсем правильное решение о котором я возможно пожалею и меня настигнет небесная кара. Но все мы грешники что уж тут скрывать
+ libs — папка где будут хранится отдельные библиотеки такие к примеру как TinyMce ,видеоплееры и т.д
+ uploads — папка с сохраняемыми на сервера данными ,загрузки ,будущая угроза файлообменников
Файлы->
-.htaccess — серверные настройки ,редактировать мы будем его нечасто ,он как блудный сын.
-index.php — Точка входа в наше великое приложение. Его мы тоже не так часто будем редактировать. Возможно даже только сегодня ,так что у вас сегодня великий шанс. Завидую

Внесем изменения в index.php ,изменим пути к папкам и добавим новые

<?php
/**
 * Pegas CMS
 * @version  1.0.0
 *
 * Content Managment System.
 * Based on Kohana Framework 3.3.1 (peregrinus)
 *
 * @author Gilamov Danis <ds-92@yandex.ru>
 * @link http://gilamov.ru
 * @copyright Gilamov.ru
 */
/**
 * Папка с файлами приложения
 */
$application = 'app';
/**
 * Папка с системными файлами (изменять нельзя)
 * Для изменения методов ,используйте наследование в папке (app)
 */
$system = 'system';
/**
 * Папка с модулями
 */
$modules = 'modules';
/**
 * Папка с темами оформления/картинками/иконками
 */
$themes = 'themes';
/**
 * Папка со стронними библиотеками ,плагинами
 */
$libs = 'libs';
/**
 * Папка со загрузками
 */
$uploads = 'uploads';
/**
 * Базовое расширение исполняемых файлов
 */
define('EXT', '.php');
/**
 * Уровень ошибок
 * @link http://www.php.net/manual/errorfunc.configuration#ini.error-reporting
 *
 * Типы уровней: E_ALL | E_STRICT  ||  E_ALL ^ E_NOTICE || E_ALL & ~E_DEPRECATED
 */
error_reporting(E_ALL | E_STRICT);
/**
 * Пути к папкам
 *
 * @link http://kohanaframework.org/guide/using.configuration
 */
define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);
if (!is_dir($application) AND is_dir(DOCROOT.$application))
	$application = DOCROOT.$application;
if (!is_dir($system) AND is_dir(DOCROOT.$system))
	$system = DOCROOT.$system;
if (!is_dir($modules) AND is_dir(DOCROOT.$modules))
	$modules = DOCROOT.$modules;
if (!is_dir($themes) AND is_dir(DOCROOT.$themes))
	$themes = DOCROOT.$themes;
if (!is_dir($libs) AND is_dir(DOCROOT.$libs))
	$libs = DOCROOT.$libs;
if (!is_dir($uploads) AND is_dir(DOCROOT.$uploads))
	$uploads = DOCROOT.$uploads;
// Константы пути
define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);
define('SYSPATH', realpath($system).DIRECTORY_SEPARATOR);
define('MODPATH', realpath($modules).DIRECTORY_SEPARATOR);
define('THEMESPATH', realpath($themes).DIRECTORY_SEPARATOR);
define('LIBSPATH', realpath($libs).DIRECTORY_SEPARATOR);
define('UPLOADSPATH', realpath($uploads).DIRECTORY_SEPARATOR);
// Очистка конфигурационных переменных
unset($application, $modules, $system, $themes, $libs, $uploads);
/**
 * Константа: Старт отсчета времени
 */
if ( ! defined('KOHANA_START_TIME'))
{
	define('KOHANA_START_TIME', microtime(TRUE));
}
/**
 * Константа: Старт отсчета выделяемой памяти
 */
if ( ! defined('KOHANA_START_MEMORY'))
{
	define('KOHANA_START_MEMORY', memory_get_usage());
}
// Bootstrap the application
require APPPATH.'bootstrap'.EXT;
if (PHP_SAPI == 'cli') // Try and load minion
{
	class_exists('Minion_Task') OR die('Please enable the Minion module for CLI support.');
	set_exception_handler(array('Minion_Exception', 'handler'));
	Minion_Task::factory(Minion_CLI::options())->execute();
}
else
{
	/**
	 * Execute the main request. A source of the URI can be passed, eg: $_SERVER['PATH_INFO'].
	 * If no source is specified, the URI will be automatically detected.
	 */
	echo Request::factory(TRUE, array(), FALSE)
		->execute()
		->send_headers(TRUE)
		->body();
}

Я даже перевел некоторые моменты ,но это только сегодня ) дальше будет хуже.
.htaccess его мы переименовываем из example.htaccess

# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
# Protect hidden files from being viewed
<Files .*>
	Order Deny,Allow
	Deny From All
</Files>
# Protect application and system files from being viewed
RewriteRule ^(?:app|modules|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Остальные файлы в корне я удалил пока. Чтобы не мешались.

3. Настройкой Boostrap
тут мы вынесем по большой части все настройки при инициализации в отдельный конфиг ,тоже для удобства ,так мы будем делать по большей части всегда.
Boostrap.php

<?php defined('SYSPATH') or die('No direct script access.');
require SYSPATH.'classes/Kohana/Core'.EXT;
if (is_file(APPPATH.'classes/Kohana'.EXT)) {
	require APPPATH.'classes/Kohana'.EXT;
} else {
	require SYSPATH.'classes/Kohana'.EXT;
}
/**
 * Enable the Kohana auto-loader.
 *
 * @link http://kohanaframework.org/guide/using.autoloading
 * @link http://www.php.net/manual/function.spl-autoload-register
 */
spl_autoload_register(array('Kohana', 'auto_load'));
/**
 * Enable the Kohana auto-loader for unserialization.
 *
 * @link http://www.php.net/manual/function.spl-autoload-call
 * @link http://www.php.net/manual/var.configuration#unserialize-callback-func
 */
ini_set('unserialize_callback_func', 'spl_autoload_call');
/**
 * Set the mb_substitute_character to "none"
 *
 * @link http://www.php.net/manual/function.mb-substitute-character.php
 */
mb_substitute_character('none');
/**
 * Initialize Kohana, setting the default options.
 *
 * The following options are available:
 *
 * - string   base_url    path, and optionally domain, of your application   NULL
 * - string   index_file  name of your index file, usually "index.php"       index.php
 * - string   charset     internal character set used for input and output   utf-8
 * - string   cache_dir   set the internal cache directory                   APPPATH/cache
 * - integer  cache_life  lifetime, in seconds, of items cached              60
 * - boolean  errors      enable or disable error handling                   TRUE
 * - boolean  profile     enable or disable internal profiling               TRUE
 * - boolean  caching     enable or disable internal caching                 FALSE
 * - boolean  expose      set the X-Powered-By header                        FALSE
 */
Kohana::init(array(
	'base_url'   => '/',
	'index_file' => FALSE,
	'charset'    => 'utf-8',
	'caching'    => FALSE,
	'cache_dir'  => APPPATH.'/cache',
	'cache_life' => 1024,
	'errors'     => FALSE,
	'profiling'   =>TRUE,
	'expose'     => FALSE
));
/**
 * Добавление класса настроек
 */
Kohana::$config->attach(new Config_File);
/**
 * Получение настроек для начальной инициализации
 */
$boostrap=(array)Kohana::$config->load('boostrap');
/**
 * Соль для Cookie
 */
Cookie::$salt = $boostrap['cookiesalt'];
/**
 * Временная зона
 */
date_default_timezone_set($boostrap['timezone']);
/**
 * Locale
 */
setlocale(LC_ALL, 'ru_RU.utf-8');
/**
 * Set the default language
 */
I18n::lang($boostrap['lang']);
if (isset($_SERVER['SERVER_PROTOCOL']))
{
	// Replace the default protocol.
	HTTP::$protocol = $_SERVER['SERVER_PROTOCOL'];
}
/**
 * Настройка уровней показа ошибок
 */
Kohana::$environment = $boostrap['error_level'];
/**
 * Добавление класса логов
 */
Kohana::$log->attach(new Log_File(APPPATH.'logs'));
/**
 * Enable modules. Modules are referenced by a relative or absolute path.
 */
Kohana::modules($boostrap['modules']);
/**
 * Set the routes. Each route must have a minimum of a name, a URI and a set of
 * defaults for the URI.
 */
Route::set('default', '(<controller>(/<action>(/<id>)))')
	->defaults(array(
		'controller' => 'welcome',
		'action'     => 'index',
	));

и создадим конфиг boostrap.php в папке app/config.

<?php defined('SYSPATH') OR die('No direct access allowed.');
/**
 * Настройки для базовой инициализации(по умолчанию)
 */
return array
(
	/**
	 * Соль для Cookie
	 */
	'cookiesalt' => '421341kd;sakda;dasdadkadas',
        /**
         * Временная зона
         */
        'timezone'  => 'Europe/Moscow',
        /**
         * Язык
         */
        'lang'  => 'ru-ru',
        /**
         * Уровень ошибок (Production|development)
         */
        'error_level' => Kohana::DEVELOPMENT,
	/**
	 * Подключаемые Модули
	 */
	'modules' => array(
		/**
		* System modules
		*/
	        'auth'       => MODPATH.'auth',          // Basic authentication
		'cache'      => MODPATH.'cache',         // Caching with multiple backends
		'database'   => MODPATH.'database',      // Database access
		'image'      => MODPATH.'image',         // Image manipulation
		'orm'        => MODPATH.'orm',           // Object Relationship Mapping
		/**
		* APP modules
		*/
		),
);

Если при запуске наше приложение все также радостно встречает нас «Hello World» то значит все пучком ,в ином случае пробуйте снова )

Скачать исходники: PegasCMS1

Свое восхищение ,недовольство мы можете выразить посредством комментарий )

Вам также может понравиться ...