1. Profesionālās tālākizglītības programma
Programmēšana
30T 481 03
Dzintars Aprubis
CODEIGNITER FRAMEWORK UN MAXISITE CMS
INTERAKTĪVAIS INFORMĀCIJAS PORTĀLS
KVALIFIKĀCIJAS DARBS
Rīga 2011
2. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Saturs:
Ievads 3.lpp
Problēmas, mūsdienu stāvokļa pārskats 4.lpp
Prasības darbam 12.lpp
Izvēlēto izstrādāšanas tehnoloģiju apraksts 15.lpp
Projekta izstrāde 25.lpp
Dokumentācija 34.lpp
Nobeigums un kopējie secinājumi 35.lpp
2
3. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Ievads.
Kvalifikācijas darba galvenais uzdevums ir atrast universālu
programmu kompleksa risinājumu interneta mājas lapu izveidei
uzņēmīgiem cilvēkiem un nelieliem uzņēmumiem.
Galvenās prasības programmu kompleksam ir līdzsvars starp
efektivitāti, kvalitāti un cenu, kā arī demonstrācijas mājas lapas izveide
par doto produktu, tā sniegto iespēju novērtēšanai praksē un
popularizēšanai.
Svarīgs faktors ir arī jaunu programmētāju un līdzīgi domājošu,
aktīvu cilvēku piesaiste projekta atbalstam un informācijas apmaiņai.
Jaunizveidotajai interneta mājas lapai, jābūt interaktīvai.
Dotajam programmu kompleksam, par ko tiks veidota mājas lapa,
jābūt pēc iespējas universālākam, vienkāršākam un ar daudzveidīgām
paplašināšanas iespējām.
Svarīgi lai mājas lapā aprakstītajam programmu risinājumam ir
daudznacionāls atbalsts un UTF-8 pilns kodējums.
Vēl pie mājas lapas izveides un konkrētā programmu produkta
izvēles svarīgi ir, lai dotā informācija būtu interesanta gan pilnīgam
iesācējam, gan jau strādājošam programmētājam.
Izvērtējot esošās programmēšanas metodes un līdzekļus
nospraustā mērķa sasniegšanai tika izvēlēts CodeIgniter frameworks un
uz tā bāzētās MaxSite CMS apvienojums.
Dotā mājas lapa ir veidota izmantojot CodeIgniter frameworku un
MaxSite CMS, kā arī tās galvenais saturs ir par šo divu lielisko produktu
izmantošanas iespējām un visu, kas ap tiem saistīts.
Iespējams, tā būs viena no pirmajām mājas lapām par šiem diviem
produktiem un to latviskošanu latviešu valodā.
3
4. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Problēmas, mūsdienu stāvokļa pārskats.
Mūsdienu ekonomiskajā situācijā arvien vairāk veidojas mikro
uzņēmumi , ģimenes uzņēmumi nelielas SIA, kā arī daudzi uzsāk biznesu
kā individuālā darba veicēji. Šiem uzņēmīgajiem cilvēkiem arvien biežāk
nepieciešamas vienkāršas, kvalitatīvas mājas lapas un lēti interneta
risinājumi, kas lielām IT kompānijām un programmētājiem ar stāžu nav
interesanti zemās peļņas dēļ. Šeit parādās brīva biznesa niša jaunajiem
programmētājiem, kā arī vajadzība pēc vienkārša, bet tai pašā laikā
paplašināma un kvalitatīva programmēšanas produkta un vienkāršiem
programmēšanas rīkiem. Uz šodienu eksistē 3 pieejas interneta
aplikāciju izveidei un katrai no tām ir savi plusi un mīnusi:
Tīrs kods CMS Framework
Plusi: Elastīgākais, Var iztikt bez Gatavas
Funkcionālākais, programmēšanas, biblotēkas,
Ātrākais darbībā, Daudz Nosaka konkrētu
„Tīrākais”, paplašinājumu, pārdomātu
Var rakstīt kodu Ātrs ja ir tam arhitektūru,
bez nekādiem uzdevumam Programmas var
ierobežojumiem paredzēts, veidot no
un arhitektūras, Daudz gatavu gataviem
Nav nekā lieka risinājumu, „ķieģeļiem”,
kodā. Praktiski jebkurš Diezgan elastīgs,
var labot. Citiem viegli
saprotams kods,
Laba
dokumentācija.
Mīnusi: Daudz jātestē, Paredzēts Elastības ziņā
Jāoptimizē, konkrētiem mazāk elastīgs
Darbietilpīgs, uzdevumiem, nekā tīrs kods,
Ļoti labi jāzina Vismazāk Nevar iztikt bez
programmēšana, paplašināms programmēšanas,
Nav noteiktas nestandarta Citiem viegli
arhitektūras, lietām, saprotams.
Citiem gūti Visvairāk atkarīgs
saprast kodu. no izstrādātājiem.
4
5. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Ņemot vērā augstāk minēto tabulu, lai izveidotu profesionālu lapu
un pamatu tālākām izstrādnēm, izvēle tika pieņemta par labu framework
arhitektūrai. Pēc interneta mājaslapas http://www.phpframeworks.com
statistikas tika apskatīti pieci populārākie frameworki:
1. http://codeigniter.com/
2. http://www.yiiframework.com/
3. http://cakephp.org/
4. http://framework.zend.com/
5. http://www.symfony-project.org/
Pēc aprakstiem framework mājas lapās un citos interneta
resursos par pamatu projektam tika izvēlēts ņemt CodeIgniter
framework (CI)
šādu īpašību dēļ:
1. Lietotājam draudzīgs, viegli apgūstams;
2. Salīdzinoši mazs pēc izmēra;
3. Labi dokumentēts (arī krievu valodā);
4. Ātrs;
5. Ar pietiekošu funkcionalitāti un viegli paplašināms.
CodeIgniter ieguvis plašu atzinību par savu nelielo, kompakto
izmēru, un ātrumu, un ir kļuvis par iecienītāko daudzu izstrādātāju vidū.
Tam pastāv plaša dokumentācija un liels lietotāju skaits, ar labu atbalstu
to vidū.
5
6. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Augstāk minētās īpašības pilnībā atbilst projekta filozofijai –
vienkāršiem, efektīviem un saprotamiem interneta aplikāciju
risinājumiemiem uz profesionālas labi dokumentētas viegli apgūstamas
programmatūras bāzes.
Gadījumā, ja ar laiku pietrūktu funkcionalitāte kā nākošie varētu
tikt izmantoti:
1. Symfony framework, kura iespējas pietiek gandrīz jebkādas
sarežģītības pakāpes WEB projektu izstrādei;
2. Zend framework, kurš izstrādāts tajā pašā kompānijā kur PHP
programmēšanas valoda, dziļi integrējas tajā un līdz ar to, tas
kļuvis par tādu kā rūpniecisko standartu.
Ņemot vērā to, ka pamata programmēšanas principi pielietojot
frameworkus ir līdzīgi, tad ar laiku pāriet uz Symfony vai Zend framework
nebūtu pārāk sarežģīts process, pie nosacījuma, ka labi būs apgūta
CodeIgniter frameworka lietošana un tā darbības principi.
Šī projekta mērķis tomēr ir izmantot pēc iespējas vieglāk
apgūstamu programmēšanas vidi. Šajā ziņā CodeIgniter frameworks ir
vispār atzīts līderis pasaulē, jauno programmētāju un izstrādātāju vidū.
6
7. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Uz CodeIgniter frameworka bāzes ir izveidotas arī daudzas satura
pārvaldības sistēmas, angliski - content management system, turpmāk
tekstā CMS.
Satura pārvaldības sistēma (CMS) ir programmatūra, kura ļauj
vienlaikus vairākiem lietotājiem dažādus teksta vai cita veida
dokumentus izveidot, apstrādāt un organizēt. Visbiežāk CMS tiek saistīts
ar internetu. Autori var šo programmu izmantot arī bez jebkādām
programmēšanas valodu zināšanām un nereti tieši internetā izveidot
jaunus tekstus, papildināt tos ar bildēm, video vai skaņām un publicēt.
Šajā sakarā par Contentu sauc visu to informāciju, kas būs redzama. Šīs
sistēmas parasti sastāv no divām daļām :
1. Contenta – jeb internetā vai intranetā redzamās daļas, kas domāta
parastajiem lietotājiem un kuri var pat nenojaust, ka tiek lietota
CMS.
2. Vadības paneļa – kas pieejams tikai administratoram un caur kuru
reģistrējoties sistēmā iespējams veikt izmaiņas contenta, jeb
mājas lapas redzamajā daļā.
Galvenais ieguvums no CMS ir tas, ka mājas lapas administrators
var nebūt programmētājs.
Mājas lapas administrators var būt arī pats klients, kam šī lapa
veidota. Tas ir milzīgs plus par labu izvēlēties arī kādu no CMS.
Šī iemesla dēļ tika apkopoti un izanalizēti tie CMS, kas izmanto
CodeIgniter frameworku (dati ņemti no oficiālās CI mājaslapas, to īss
apraksts netiek tulkots):
EgyptCMS
An easy to use base for designers with a default auth system, database
and more.
PyroCMS
Lightweight, themeable and dynamic, PyroCMS is perfect for CodeIgniter
developers to kickstart your projects.
7
8. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
IonizeCMS
Lonize is a Content Management System base on CodeIgniter. Easy,
powerful and modular, Ionize is build by webdesigners for
webdesigners.
MaxSiteCMS
WordPress-like blog CMS. In heavy development. Documentation is in
Russian only for now.
FUELCMS
An easy, flexible, empowering Content Management System for rapid
development that transforms your CodeIgniter projects into client
manageable brilliance.
CODEFIGHTCMS
Simple multiple website manager.
Kā labāko CMS uz CodeIgniter bāzes varētu minēt
expressionengine CMS no saita http://expressionengine.com , kuru
izstādā tā pati komanda, kas izstrādā pašu framework. CMS ir ļoti labi
nostrādāts, funkcionāls un ar 100% CodeIgniter savienojamību. Tā
vienīgais trūkums – tā ir pa maksu (100-300$) un tādēļ neder šim
projektam, bet varētu tikt izmantota nākotnē. Šī framework devīze ir:
Commercial Product + Open Source = Perfection
A SIMPLE MODEL WHERE EVERYBODY WINS!
8
9. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Šajā projektā izmantotajai CMS bija izvirzīti vairāki nosacījumi:
1. Bezmaksas;
2. Iespēja izmantot vienlaicīgi gan CMS gan CI funkcionalitāti;
3. Pilns UTF-8 atbalsts un iespēja viegli izmantot dažādas valodas;
4. Mazs apjoms un liela ātrdarbība;
5. Viegla pāreja no vienas versijas uz otru;
6. Vienkārša administrācija admin panelī;
7. Paplašināšanas iespējas ar moduļiem un tēmām;
8. Plašs lietotāju un izstrādātāju loks;
9. Laba dokumentācija gan, krievu gan angļu valodās;
10.Iespēja viegli pievienot citu izstrādātāju PHP skriptus;
11.Loģiska, viegli apgūstama un saprotama arhitektūra;
12.Iespēja izveidot jebkura izskata ādiņas.
Izvērtējot un notestējot vairākus populārākos CMS, izvēle krita uz
MaxSite CMS, kurš praktiski vienīgais atbilda visām izvirzītajām prasībām.
Otrs nemazāk nozīmīgs faktors bija tas, ka izstrādātājiem ir ļoti
veiksmīgi veidots un pārdomāts saits, ar ļoti plašu informācijas klāstu:
http://max-3000.com/
Šeit var izlasīt pilnu MaxSite CMS iespēju aprakstu, kas
pārpublicēts no oficiālās mājas lapas autora interpretācijā:
Простая установка. Следуя несложной инструкции нужно указать параметры
базы данных. Дальше инсталляция пройдет автоматически.
9
10. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Скорость работы. За счет продуманной архитектуры системы, MaxSite CMS
работает очень быстро. По некоторым оценкам WordPress работает примерно в
5-10 раз медленнее.
Небольшой размер системы. В распакованном виде это примерно 5Мб. Это с
учетом того, что в комплекте 84 плагина.
Небольшая ресурсоемкость. В среднем MaxSite CMS потребляет (php) около 1-
6Мб (см. для примера статистику потребления в подвале этого сайта). И это при
всех включенных плагинах. Это даже не стоит сравнивать с WordPress, который
обычно требует от 9 (ранних версий) до 32Мб (последних версий, а в wp-
админке и все 256Мб).
MaxSite CMS использует фреймворк CodeIgniter. Поэтому разработчику
автоматически доступны богатые средства CodeIgniter: библиотеки, хелперы,
API для работы с базой данных и т.д. Стоит также отметить, что CodeIgniter
считается одним из самых быстрых и удобных фреймворков.
Развитая система кэширования. Кэширование - часть системы и механизм
кэширования очень простой. Поэтому у него высокая скорость и легкость
использования в произвольных частях кода.
Гибкая система типов данных. На MaxSite CMS можно забыть про ограничения
WordPress на типы данных и страниц. Вы можете придумывать свои типы
данных, свою систему навигации и т.д.
MaxSite CMS не выполняет лишнего кода. При инициализации системы
выполняется только «ядро» и подключаются активированные плагины. После
этого управление передается шаблону. Поэтому система будет выполнять ровно
тот код, который вы ей укажете. Это принципиально отличается от WordPress, в
котором выполняется весь код, получаются все данные, а уже потом у
разработчика есть возможность что-то с ним делать. С MaxSite CMS у вас
полный контроль.
Шаблоны для MaxSite CMS не сложнее вордпрессовских. Последние версии
шаблона default позволяют другим шаблонам использовать его
функциональность для вывода разных типов данных. Таким образом, создание
шаблона для MaxSite CMS по сути сводится к обычной верстке.
SEO-friendly. В MaxSite CMS можно указывать title, keywords, descriptions для
каждой страницы. Можно указать дефолтные значения, а также различные
комбинации. Есть возможность указывания canonical, адреса rss, а также
запретить использование «лишних» адресов (исключение дублирования
контента). Поддерживаются noindex и nofollow для ссылок. Есть плагины для
перелинковки (автоматической по заголовкам) и внутренними ссылками.
Мета-данные страниц имеют структуру ini-файла. За счет этого добавить
метаполе (дополнительную информацию к странице) можно вообще без
программирования.
Опции, настройки также могут быть выполнены в виде ini-файла. Это
значительно упрощает их добавление/редактирование.
Система разрешений авторов работает по принципу групп. Вы можете создавать
разные группы и отмечать нужные для них действия.
Система комментирования позволяет оставлять комментарии анонимам, а
также т.н. комюзерам - зарегистрированным. Причем регистрация происходит
автоматически в момент комментирования. Данные комюзеров хранятся в
отдельной базе и позволяют на её основе выполнять любые манипуляции.
Главный плюс такого деления в том, что у комюзеров нет доступа в админ-
панель.
10
11. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Полная поддержка виджетов. В MaxSite CMS создать виджет очень просто за
счет продуманного API. В отличие от WordPress'а, который позволяет
устанвливать только один виджет для одного плагина, в MaxSite CMS любой
виджет может использоваться сколько угодно раз.
MaxSite CMS расширяется за счет плагинов. В отличие от бардака WordPress, в
MaxSite CMS используется строгое именование и за счет вспомогательных
функций плагины получаются небольшими. Для примера, плагин антиспама,
который имеет свою страницу настроек имеет размер всего 13кб. Плагины в
которых только виджеты - еще меньше - 2-5Кб.
Шаблоны для админ-панели очень просты. Например дефолтный шаблон - это
9Кб. В шаблоне используется нормальный html и css, в которых разберется даже
школьник. Поэтому, если потребуется сделать свой «фирменный» стиль
админки, проблем не будет.
Функциональность админ-панели определяется точно такими же плагинами.
Разница только в том, что эти плагины прописаны в коде и автоматически
активируются при входе в админ-панель. Таким образом любой плагин может
добавить себя в админ-панель. При этом все они используют единый
несложный API.
В админ-панели существует возможность настраивать шаблон. В отличие от
WordPress, где данная возможность реализуется очень сложно, в MaxSite CMS
для этого достаточно разместить в каталоге шаблона один файл options.ini.
Таким образом шаблон можно сделать полностью настраиваемым.
Для создания плагинов в комплекте поставки присутствуют файлы template-...
для разных вариантов: только виджет, просто плагин, плагин с настройкой в
админ-панели, полный вариант.
На данный момент в комплекте следующие плагины: Блокировка по IP,
Антиспам, BBCode, Календарь, Капча антиспам, Облако рубрик, Вывод рубрик,
Кнопки для комментирования, Счетчик переходов по ссылке, Виджет событий,
Виджет Избранное, Последние комментарии, Последние записи, LightBox с
галереей (картинки загружаются и автоматически подготавливаются для
галереи, код галереи генерируется автоматически), Виджет для ссылок, Виджет
для формы логина, Самое комментируемое, Самое читаемое, Пагинация
(листание страниц), Плагин перелинковки страниц, Преобразование PRE в
список OL, Псевдокод, Случайные страницы, Цитаты или случайный текст,
Рейтинг страниц в виде звездочек, Форма поиска, Карта сайта (архив),
Смайлики, Облако меток, Текстовый блок (html/php), Twitter (rss-агрегатор) и
другие.
Плагины постоянно добавляются, поэтому их количество будет только
увеличиваться.
В комплекте поставки входят magpierss и jquery (+UI).
Бесплатность и открытость. Лицензия GNU GENERAL PUBLIC LICENSE - 2.
Kā papildus var minēt to, ka:
1. iespējams izmantot standarta CI funkcionalitāti,
2. lapās ievietot iepriekš sagatavotu HTML kodu,
3. lapās ievietot iepriekš sagatavotu PHP kodu.
11
12. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Prasības darbam.
Pirms instalācijas ieteicams nokopēt un uzstādīt Notepad++ no
saita http://notepad-plus-plus.org/. Šo teksta redaktoru ieteicams lietot,
jo viss kodējums ir UTF-8.
Lai izveidotu projekta mājas lapu, izveidojiet Linux serveri
(ieteicams debian) no saita http://www.debian.org/.
Uzstādiet Apache web serveri un failā httpd.conf atļaujiet :
LoadModule rewrite_module modules/mod_rewrite.so.
Uzstādiet MySQL ar UTF8 un MyISAM.
Uzstādiet PHP ar bibliotēku mbstring.
CodeIgniter frameworks ir jau iekļauts MaxSite CMS instalācijā.
12
13. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Līdz ar to sagatavošanās darbi ir veikti un varat pāriet pie MaxSite
CMS instalācijas, nokopējot tā pēdējo versiju no saita:
http://max-3000.com.
Atarhivējiet nokopēto failu un visas mapes pārkopējiet uz serveri. Tālāk
veiciet nepieciešamās izmaiņas un configurāciju:
atvērt application/config/database.php-distr
uzstādīt db pieejas parametrus
priekš cache uzstādīt
$db['default']['cache_on'] = TRUE;
$db['default']['cachedir'] = "/application/cache/db";
pārsaukt par database.php.
atvērt application/maxsite/mso_config.php-distr
ierakstīt frāzi šifrēšanai ja to izmaina paroles nav derīgas
pārsaukt mso_config.php
uzstādīt
/application/cache/
/application/cache/db
/application/cache/html
/application/cache/rss
tiesības 777
uzstādīt
/sitemap.xml tiesības 666 (izmanto google indeksācijai)
13
14. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
uzstādīt
/uploads/
/uploads/_mso_float
/uploads/_mso_i
/uploads/mini
tiesības 777
failā robots.txt-distr
ierakstīt
Host: site.com
saglabāt kā robots.txt
pārsaukt /.htaccess-distr par .htaccess
pievienot failā .htaccess pēc «RewriteEngine on»:
RewriteCond %{HTTP_HOST} ^www.site.com
RewriteRule ^(.*)$ http://site.com/$1 [R=permanent,L]
palaizt http://jūsusaits/ un izpildām prasīto
atvērt /application/maxsite/mso_config.php
izmainīt
$mso_install = true;
14
15. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Izvēlēto izstrādāšanas tehnoloģiju apraksts.
1. No sākuma apskatīsim CodeIgniter struktūru:
(šī ir mājas direktorija piemēram WWW)
/System (paša framework sistēmas faili)
/Application ( visa Jūsu izstrāde jāveic šeit!!!)
/Config
/Controllers
/Models
/Views
/Helpers
/ ...
/User_guide (šo mapi var dzēst ārā, tie ir help faili)
index.php (pats galvenais fails)
2. Konfigurācija:
Visa konfigurācija ir mapē /application/config/
Config.php
base_url (norāda saita adresi)
Routes.php
default_controller (norāda,kurš kontrolieris atveras)
Database.php
hostname, username, password, database (db parametri)
15
16. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
3. Controllers:
Katra kontroliera klasē rakstītā metode ir pieejama kā www lapa,
bet viss teksts, ko metode izdrukā, tiek nogādāts
pārlūkprogrammai:
kontrolieris.php
class Kontrolieris extends Controller {
function laiks() {
$data["laiks"]=mktime();
$this->load->view("skats",$data);
}
}
4. Views:
Lai kontrolierī nebūtu jāizmanto “echo”, izvades līmeņa
sagatavošanai lieto skatus. Ielādējot skatu, kontrolieris padod līdzi
masīvu $data ar parādāmajiem datiem. Skati satur daudz HTML un
mazliet PHP, kas lasa informāciju no $data un iekļauj, kur
nepieciešams.
skats.php
<html>
<head></head>
<body>
<div id="time">
<?php echo $time ?>
</body></html>
16
17. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
5. Skata izsaukšana kontrolierī:
$data["laiks"]=mktime();
$this->load->view("skats",$data);
6. Adrešu uzbūve:
http://www.codeigniter.lv/{klase}/{funkcija}/{parametri}
7. Models:
Models ir CodeIgniter papildus slānis.
8. Helpers:
Helper ir dažādu veidu palīdzētāji, kas atvieglo koda rakstīšanu.
Tāds ir īss pārskats par CodeIgniter darbību.
Atšķirība starp CI 1.x versiju un 2.x versiju:
VERSION 1.7.2
CONTROLLERS
class Contact extends Controller {
function Contact()
{
parent::Controller();
}
}
17
18. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
MODELS
class Contact_model extends Model {
function Contact_model()
{
parent::Model();
}
}
VERSION 2.0.0
CONTROLLERS
class Contact extendsCI_Controller {
function__construct()
{
parent::__construct();
}
}
Models
class Contact_model extendsCI_Model {
function__construct()
{
parent::__contruct();
}
}
18
19. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Vēl jāpiemin šādas mapes:
/Application /errors/ – kļūdu paziņojumi;
/Application /libraries/ – bibliotēkas, kas attiecas tikai priekš jūsu
aplikācijas;
/Application /hooks/ – huki atļauj izmainīt paša CI kodola darbību.
CodeIgnitor frameworks būvēts pēc MVC arhitektūras. MVC
(Model-View-Controller) sadala sistēmu trijās daļas - datu ievade, datu
apstrāde, datu attēlojums, kur katra daļa risina atsevišķu uzdevumu.
Loģiskā komponente Modelis iekapsulē datu kodolu un pamata
funkcionalitāti, kas nav atkarīga no attēlojuma. Loģiskā komponente
Skats ir atbildīga par Modeļa datu attēlošanu, atbilstoši lietotāja
definētai datu prezentācijas formai. Loģiskā komponente Kontrolleris
saņem un nolemj kā apstrādāt ziņojumus, kurus saņem no lietotāja, un
translē signālus komandās, kas tiek sūtītas Modelim vai Skatam.
19
20. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
CodeIgniter frameworkā Model-View-Controller ir realizēts šādi:
20
21. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
MaxSite CMS uzbūves shēmas:
21
22. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
22
23. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
MaxSite CMS darbības princips (autora raksts):
1. Входящий адрес принимает CodeIgniter. Он сам определяет что с ним делать. Но
настраиваем его мы так, чтобы все запросы автоматом передавались нашему
контролеру.
2. Наш контролер, благодаря CodeIgniter, сразу вполняет функции типа. Например если
в адресе указывается «archive», значит будет выполняться функция «archive» (с таким
же названием). При этом у нас в конструкторе сразу подключается библиотека
основных функций CMS, а также считываются основные настройки. (Пока они сделаны
в виде файла, но должны храниться в БД.) Здесь же происходит интересная вещь: если
указывается несуществующая функция (тип), то стандартно CodeIgniter выдает
сообщение об ошибке (404). Нас это не устраивает, поэтому я немного изменил
CodeIgniter и теперь управление передается не на страницу ошибки, а на функцию
контролера page_404(). И если этой функции нет, то уже на стандартную 404-страницу.
Таким образом мы можем подключить свой обработчик несуществующих типов.
Но это еще не все. Если нам нужно подключить свой тип страницы, то не обязательно
переписывать контролер. Вместо этого контролер сам проверяет существование php-
файла с именем входящего типа. И если есть, то подключаем как обычно через
require(). Если же нет, то передаем управление на главную страницу (функция home()).
Таким образом, если возникнет необходимость расширить типы данных, то делается
это очень просто: создается php-файл с именем типа и в нем несколько строк, где
указывается тип и вьвер - все данные автоматом передадутся по цепочке в файл
шаблона.
3. В контролере заполняется специальная структура-массив, где указывается тип
страницы. Так же здесь передается входящий url и его сегменты. В общем эта
информация нам нужна для того, чтобы в самом шаблоне можно было бы сразу
получить файл типа страницы.
4. После контролера управление передается на вьювер (view). Поскольку у нас уже есть
своя структура с нужными для шаблона данными, то мы используем один-
единственный вьювер. В нем мы передаем наши переменные и смотрим текущий
шаблон. Шаблон указывается в конфигурации и совпадает с каталогом. По-умолчанию
используется шаблон «default».
Правда здесь стоит сделать отдельное замечание. Поскольку мы сразу же
предполагаем, что у нас будет использваться RSS, то мы будем анализировать
входящий адрес на наличие «feed» в конце. И если таково имеется, то управление
будем передавать на другой вьювер - «feed».
5. В наш шаблон всегда передается в файл index.php. Всегда. В нем выполняется
селектор типа страницы (тот который мы получили в начале). Выглядит это так:
if ( is_type('archive') ) require('archive.php');
23
24. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
elseif ( is_type('author') ) require('author.php');
elseif ( is_type('category') ) require('category.php');
elseif ( is_type('home') ) require('home.php');
elseif ( is_type('link') ) require('link.php');
elseif ( is_type('page') ) require('page.php');
elseif ( is_type('page_404') ) require('page_404.php');
elseif ( is_type('search') ) require('search.php');
elseif ( is_type('tag') ) require('tag.php');
else require('page_404.php');
В зависимости от типа мы подключаем нужные нам файлы .
6. Уже в этом подключаемом файле мы и будем выполнять запросы к БД (точнее это
будет набор готовых функций), заполнять начальные сведения для header страницы и
после этого выполняем нужный нам вывод (типа TheLoop).
Вот пример home.php:
<?php
# подготовка данных
$MSO->title = 'Главная страница сайта';
$MSO->keywords = 'Ключевики';
$MSO->description = 'Описание сайта для этой страницы';
# получение данных ...
# начало вывода
# подключается header и начало html-дизайна
require('main-start.php');
?>
Home - все что угодно - сам вывод данных
<?php
# завершение html, footer и т.п.
require('main-end.php'); ?>
24
25. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Projekta izstrāde.
Projekta izstrāde sastāv no vairākām daļām:
1. Uzstādīt un nokonfigurēt MaxSite CMS (To jūs jau izdarījāt).
2. Lai samazinātu SQL-pieprasījumus, ieslēgt CodeIgniter kešošanu.
Lai to izdarītu failā database.php ierakstam:
$db['default']['cache_on'] = TRUE;
$db['default']['cachedir'] = "system/cache/db";.
3. Šablona izveide. (Ja gribam, ņemam kādu no gatavajiem).
Izveidojam katalogu /templates/mini/.
Tajā izveidojam failus (vai varam pārkopēt no /default mapes):
info.php – informācija par šablonu
index.php – failu tipu dispičers
functions.php – sidebar funkcionalitāte
footer.php - kājene
header.php - galvene
sidebar1.php – sidebar( 1 sānu panelis).
Šos failus varēsim izmantot arī turpmākajos projektos.
struct.css – šis fails būs struktūras (karkasa) dizaina apraksts.
style.css – pārējais noformējums.
Tiem jābūt ierakstītiem failā header.php.
Saita mainīgā daļa tiks izvadīta no pašas sistēmas.
Nemainīgā daļa - no main-start.php , main-end.php failiem.
Šablona struktūra var būt jebkāda, vienīgais nosacījums jābūt
failam - index.php.
Ko izvadīt tajā – atkarīgs no jūsu vajadzībām.
Tālāk jāizveido faili main-start.php un main-end.php ar vajadzīgo
html kodu. Tagad ieslēdzam šablonu admin panelī un skatamies
rezultātu. Pārējais darbs saistīts ar CSS stiliem un noformēšanu.
25
26. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Piemēri:
main-start.php
#pieslēdzam header
require_once(getinfo('template_dir') . 'header.php');
<div id="container"> #container
<div id="headers">
<div id="headers-wrap"> #papildus priekš IE
<div id="header1">...</div>
<div id="header2">...</div>
<div id="header3">...</div>
</div><!-- div id="headers-wrap" -->
</div><!-- div id="headers" -->
<div id="sub-container"> #bloks saturam
<div id="wrapper">
<div id="content"> #bloks tekstam
<div class="content-all">
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Šeit būs mainīgā daļa ko izdos sistēma
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
26
27. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
main-end.php
</div><!--div class="content-all"-->
</div><!-- div id="content" -->
</div> <!-- div id="wrapper" -->
#saidbar
<div id="sidebars">
<div id="sidebar1">
<div class="wrap">
<?php require(getinfo('template_dir') .
'sidebar-1.php'); ?>
</div><!-- div class=wrap -->
</div><!-- div id="sidebar-1" -->
</div><!-- div id="sidebars" -->
</div><!-- div id="sub-container" -->
<?php require(getinfo('template_dir') . 'footer.php'); ?>
</div><!-- div id="container" -->
</body>
</html>
27
28. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Stili:
struct.css
* {padding: 0; margin: 0;}
html, body {margin: 0; padding: 0;}
body {font: 9pt/1.3em Verdana;}
#container {width: 900px; margin: 0 auto;}
#header1 {background: #DDD; height: 100px;}
#header2 {background: #EEE; height: 50px;}
#sub-container {float: left;}
#wrapper {float: left; width: 100%;}
#content {margin: 0 0 0 300px;} #sidebar kreisa pusē
#sidebars {float: left; width: 300px; margin-left: -100%;}
vai
#content {margin: 0 300px 0 0;} #sidebar labā pusē
#sidebars {float: left; width: 300px; margin-left: -300px;}
style.css - šo failu variet veidot pēc vajadzības.
4. CodeIgniter funkciju pieslēgšana.
Lai pieslēgtu Codeigniter standarta controlieri uz adresi
example.lv/ci/.....
failā routes.php rakstam:
$route['default_controller'] = "maxsite";
$route['my:any'] = "welcome";
Tagad Codeigniter standarta controlieris piejams pēc adreses:
example.lv/ci/.....
28
29. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
5. Valodu maiņa.
Tulkošanai padodas visas frāzes, kas tiek rādītas ar
ar funkciju t('фраза', __FILE__);.
Tulkošanas fails atrodas tajā pašā katalogā /language/, kur
tulkojamais:
/common/language/ sistēmas failiem,
/admin/language/ admin paneļa failiem,
/common/language/plugins/ plugin failiem,
/common/language/templates/ template failiem.
Faila nosaukums sakrīt ar valodas nosaukumu:
en.php - angļu
lv.php - latviešu
Valodu nosaka failā:
mso_config.php
<
$MSO->language = 'lv'; //latviešu.
>
Tulkojamā lv.php faila struktūra:
< if (!defined('BASEPATH')) exit('No direct script access allowed');
# ceļš/xxx.php
$lang['фраза1'] = 'tulkojums1';
$lang['фраза2'] = 'tulkojums2';
>
6. Citi paplašināšanas veidi:
MaxSite CMS iespējams paplašināt arī izmantojot parastus HTML
vai PHP failus, kā arī citu valodu failus. Šim nolūkam tiek izmantoti
speciāli tegi, starp kuriem var ievietot savu kodu. Var arī ielikt savu
kodu bet neizpildot to, tā lai parādās koda piemērs ar sintakses
izgaismojumu.
29
30. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
7. Databāze.
Databāze tiek izveidota automātiski pie sākotnējās saita
instalācijas. Šajā projektā aprubis_ ar sekojošām tabulām, kuras
var redzēt no SQL faila datubāzes izveidei:
CREATE DATABASE IF NOT EXISTS `vdstvr2q_max` /*DEFAULT CHARACTER SET utf8 */;
USE `vdstvr2q_max`;
CREATE TABLE IF NOT EXISTS `mso_cat2obj` (
`cat2obj_id` bigint(20) NOT NULL AUTO_INCREMENT,
`page_id` bigint(20) NOT NULL DEFAULT '0',
`category_id` bigint(20) NOT NULL DEFAULT '0',
`links_id` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`cat2obj_id`),
KEY `category_id` (`category_id`),
KEY `page_id` (`page_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `mso_category` (
`category_id` bigint(20) NOT NULL AUTO_INCREMENT,
`category_id_parent` bigint(20) NOT NULL DEFAULT '0',
`category_type` enum('page','links') NOT NULL DEFAULT 'page',
`category_name` varchar(255) DEFAULT '',
`category_desc` longtext,
`category_slug` varchar(255) DEFAULT '',
`category_menu_order` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`category_id`),
KEY `category_slug` (`category_slug`),
KEY `category_id_parent` (`category_id_parent`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `mso_comments` (
`comments_id` bigint(20) NOT NULL AUTO_INCREMENT,
`comments_page_id` bigint(20) NOT NULL DEFAULT '0',
`comments_parent_id` bigint(20) NOT NULL DEFAULT '0',
`comments_users_id` bigint(20) NOT NULL DEFAULT '0',
`comments_comusers_id` bigint(20) NOT NULL DEFAULT '0',
`comments_author_name` varchar(255) NOT NULL,
`comments_author_ip` varchar(100) NOT NULL DEFAULT '',
`comments_date` datetime NOT NULL DEFAULT '2008-01-01 00:00:00',
`comments_content` longtext,
`comments_rating` bigint(20) NOT NULL DEFAULT '0',
`comments_approved` bigint(20) NOT NULL DEFAULT '0',
`comments_type` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`comments_id`),
KEY `comments_page_id` (`comments_page_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `mso_comusers` (
`comusers_id` bigint(20) NOT NULL AUTO_INCREMENT,
`comusers_email` varchar(255) DEFAULT '',
`comusers_password` varchar(255) DEFAULT '',
`comusers_nik` varchar(255) DEFAULT '',
`comusers_allow_publish` enum('0','1') NOT NULL DEFAULT '0',
`comusers_count_comments` bigint(20) NOT NULL DEFAULT '0',
`comusers_icq` varchar(255) DEFAULT '',
`comusers_url` varchar(255) DEFAULT '',
`comusers_msn` varchar(255) DEFAULT '',
`comusers_jaber` varchar(255) DEFAULT '',
30
35. CodeIgniter framework un MaxSite CMS interaktīvais informācijas portāls. Izstrādātājs: Dzintars Aprubis
Nobeigums un kopējie secinājumi.
MaxiSite CMS uz CodeIgniter bāzes manuprāt ir viens no
vislabākajiem risinājumiem jauniesācējam programmistam, lai pilnvērtīgi
varētu sākt izstrādāt vienkāršus, profesionāla līmeņa saitus ar saprotamu
uzbūvi, kas balstīta uz Model-View-Controller arhitektūras.
Projekta spēks slēpjas tur, ka var izmantot gan CodeIgniter
programmēšanas iespējas, gan HTML, PHP, gan vienkārši lietot CMS
iespējas, tādējādi kombinējot dažādus programmēšanas veidus un
elastīgi pielāgojoties klienta prasībām.
Pats grūtākais ir izprast MaxiSite CMS un CodeIgniter darbību un
konfigurācijas failus – tam vajadzīgs diezgan ilgs laiks.
Šādai sistēmai ir liels potenciāls un tā strauji turpina attīstīties.
Šobrīd esmu tikai ceļa sākumā, bet ceru, ka diezgan ātri gūšu labus
panākumus, jo šeit redzu sava biznesa iespējas.
35