Написание 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 ,изменим пути к папкам и добавим новые

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

Я даже перевел некоторые моменты ,но это только сегодня ) дальше будет хуже.
.htaccess его мы переименовываем из example.htaccess
<br />
# Turn on URL rewriting<br />
RewriteEngine On</p>
<p># Installation directory<br />
RewriteBase /</p>
<p># Protect hidden files from being viewed<br />
&lt;Files .*&gt;<br />
	Order Deny,Allow<br />
	Deny From All<br />
&lt;/Files&gt;</p>
<p># Protect application and system files from being viewed<br />
RewriteRule ^(?:app|modules|system)\b.* index.php/$0 [L]</p>
<p># Allow any files or directories that exist to be displayed directly<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d</p>
<p># Rewrite all other URLs to index.php/URL<br />
RewriteRule .* index.php/$0 [PT]<br />

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

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

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

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

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

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

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

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

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