Néhány saját fejlesztésű vagy átdolgozott plugint szeretnék bemutatni symfony 1.4 rendszerben. Egyrészt hátha kapok némi építő jelegű kritikát a pluginokkal kapcsolatban, másrészt bemutatnám, hogy én hogyan képzelem el egy projekt alapjait.

A pluginok, amiket előszeretettel használok és részben továbbfejlesztettem a https://github.com/nova76/nova-plugins githubon érhetők el.
Első körben az sfAdminThemejRoller plugin néhány általam leprogramozott új lehetőségét szeretném bemutatni.

Ebben a bejegyzésben egy symfony 1.4-es egyszerű terméklistát bemutató oldalt fogok létrehozni.
Lesznek termékek és termékkategóriák. Az egyszerűség kedvéért most egy termék egy kategóriához tartozhat.

Az előző bejegyzésem alapján most már elég ha létrehozunk egy projekt könyvtárat a symfonyhoz.

[sourcecode language=”bash”]
mkdir demo1 # letrehozzuk a könyvtárat
cd demo1 # belépünk a könyvtárba
symfony generate:project demo1 # legeneráljuk a demo projektünk
# hozzuk létre az adatbázis kapcsolatot:
./symfony configure:database –name=doctrine –class=sfDoctrineDatabase "mysql:host=localhost;dbname=demo1" demo1 password
[/sourcecode]

majd egy kicsit még érdemes kozmetikázni a config/databases.yml fileban, állitsuk be utf8-ra a békesség kedvéért:

[sourcecode language=”plain”]
all:
doctrine:
class: sfDoctrineDatabase
param:
dsn: ‘mysql:host=localhost;dbname=demo’
username: demo
password: password
attributes:
default_table_charset: utf8
default_table_collate: utf8_unicode_ci
[/sourcecode]

[sourcecode language=”bash”]
./symfony generate:app frontend
cd plugins
git clone git://github.com/nova76/nova-plugins.git .
cd ..
[/sourcecode]

szerkesszük a ProjectConfiguration.class.php fájlt:

[sourcecode language=”php”]
$this->enablePlugins(‘sfDoctrinePlugin’,
‘sfAdminThemejRollerPlugin’,
‘sfJqueryReloadedPlugin’);
[/sourcecode]

tegyük elérhetővé a pluginok web mappáját:

[sourcecode language=”bash”]
./symfony plugin:publish-assets
[/sourcecode]

Hozzuk létre a config/doctrine/schema.yml fájlban a táblákat:

[sourcecode language=”plain”]
Product:
actAs:
Sluggable:
fields: [title]
name: slug
type: string
length: 255
unique: true
columns:
id:
type: integer(11)
primary: true
autoincrement: true
title:
type: string(60)
notnull: true
description:
type: text
category_id:
type: integer(11)
relations:
Category:
foreignAlias: Products
class: Category

Category:
actAs:
Sluggable:
fields: [title]
name: slug
type: string
length: 255
unique: false
columns:
id:
type: integer(11)
primary: true
autoincrement: true
title:
type: string(60)
notnull: true
description:
type: text
notnull: true
[/sourcecode]

Generáljuk le az összes osztályt és az adatbázist és a két cms modult:

[sourcecode language=”bash”]
./symfony doctrine:build –all
./symfony doctrine:generate-admin –module=CategoryAdmin frontend Category
./symfony doctrine:generate-admin –module=ProductAdmin frontend Product
[/sourcecode]

majd szerkesszük őket ízlésünk szerint:
A kategóriák szerkesztését turbozzuk fel némi ajaxal:
apps/frontend/modules/CategoryAdmin/config/generator.yml

[sourcecode language=”plain”]
generator:
class: jRollerDoctrineGenerator
param:
model_class: Category
theme: jroller
non_verbose_templates: true
with_show: false
singular: ~
plural: ~
route_prefix: category
with_doctrine_route: true
actions_base_class: sfActions

config:
actions: ~
fields: ~
list:
display: [title, slug]
actions:
_new:
jq_dialogbox : new_dialog # dialogus ablakban történik a rögzítés
object_actions:
_show:
jq_dialogbox : show_dialog # dialogus ablakban jelennek meg az adatok
_edit:
jq_dialogbox : edit_dialog # dialogus ablakban módosítható a rekord
_delete:
remote : true
afterRemote : removeRow # csak a sort törli ki, nem a teljes táblát
batch_actions: []
filter: ~
form: ~
edit: ~
new: ~
[/sourcecode]

A termékek listát pedig rendezhessünk kategória szerint
apps/frontend/modules/ProductAdmin/config/generator.yml:

[sourcecode language=”plain”]
generator:
class: jRollerDoctrineGenerator
param:
model_class: Product
theme: jroller
non_verbose_templates: true
with_show: false
singular: ~
plural: ~
route_prefix: product
with_doctrine_route: true
actions_base_class: sfActions

config:
actions: ~
fields:
# az alábbi sor egy kapcsolt tábla szerinti rendezést mutat be
Category: { is_sortable: true, peer: Category, sort: title}
list:
display: [title, slug, Category]
filter: ~
form:
hide: [slug] # rejtsük el a slugot a formból
edit: ~
new:
[/sourcecode]

felraktam ezt a demo változatot a githubra: https://github.com/nova76/demo
Egy gyors install:

[sourcecode language=”bash”]
mkdir demo1
cd demo1
git clone git://github.com/nova76/demo.git .
mkdir plugins
cd plugins
git clone git://github.com/nova76/nova-plugins.git .
cd ..
mkdir cache
mkdir log
chmod a+x ./symfony
# edit config/databases.yml
./symfony doctrine:build –all
./symfony project:permissions
./symfony plugin:publish-assets
[/sourcecode]

itt pedig megtekinthető:
Product Admin
Category Admin

A következő részben pedig jöjjön egy kis változtatás, aminek segítségével a termékeket csak egy kategórián belül jelenítjük meg. Ehhez már talán programozni is kell, de nem kell megijedni még ehhez sem kell semmi algoritmust sem írnunk 🙂