[right]
سلام
من یه سیستم مدیریت شکل ظاهری درست کردم که می خواستم راه پیاده سازیشو بگم شاید به کارتون بیاد .
من اومدم سیستم رو جوری طراحی کردم که تمام اطلاعات مربوط به صفحات سایت( سمت کاربر) رو بتونیم از توی ادمین طراحی کنیم و عملا برای ساختن ظاهر سایت نیازی به کدنویسی و کوئری نوشتن نباشه و تنها با نوشتن چند بیزرول بتونید داده اه را داخل پورتلت ها وارد کنید.
این کار چند تا مزیت داره
اول اینکه دیگه هرکی هرطور بخواد نمیتونه کد بزنه و یه جور استاندارد وجود داره
دوم اینکه هسته برنامه دست نخورده میمونه و میشه راحت تر روش کار کرد و آپدیتش کرد
سرعت پیاده سازی سایت ها بسیار بالا میره
شما می تونید ابزارهایی که ازشون استفاده می کنید مانند کد های اسکریپ و اسلایدر ها یا … رو داخل پورتلت هایی که به صورت بلک باکس ساختید قرار بدید و تنها کاری که باید بکنید ارسال داده به آنها برای نمایش خواهد بود
تکنیک استفاده شده ساده است
در مرحله اول در دیتا بیس یک جدول می سازیم که در آن انواع صفحاتی رو که داریم تعریف می کنیم مثلا صفحه اصلی ، صفحه داخلی مطالب ، صفحات لیست گیری و …
[left]
TABLE PAGES
id name
1 mainPage
2 listPage
3 viewPage
[/left]
در مرحله بعد یک جدول درست میکنیم که در آن اطلاعات مربوط به ستونهایی که هر صفحه را می سازد را نگهداری می کنیم ، به عنوان مثال اگر قرار است صفحه اول ما ۲ ستونه باشد در این جدول ۲ ستون را با نام های باکس۱ و باکس ۲ تعریف می کنیم و اگر از بوت استرپ یا بلوپرینت استفاده کرده باشید می توانید به هر کدام از این باکس ها یک کلاس اسپن اختصاص دهید که برای صفحه اول جدول مشابه این حالت خواهد بود
[left]
TABLE BOXES
id name class
1 Box1 span4
2 Box2 span8
[/left]
حالا باید در جدولی دیگر باکس ها رو به صفحات اختصاص بدهید
[left]
TABLE PAGE-BOX
id page_id box_id
1 1 1
1 1 2
[/left]
خب تا اینجا استایل صفحه اول رو ساختیم، البته برای ساختن استایل های پیچیده تر هم میشه به اضافه کردن یکی دو تا فیلد انجامش داد که چون پیچیده میشه الان اگه خواستید بعدا میگم براتون
حالا به یه جدول نیاز داریم که توش پرتلت ها رو تعریف کنیم ، قبل اینکه وارد این بحث بشم باید یه توضیح مختصر بدم .
من اینجوری فرض کردم که هر پرتلت داخل صفحه دارای ۲ بخشه. بخش اول ظاهره خود پرلته که شامل هدر و فوتر و رنگ بندیش میشه و بخش دوم هم محتواییه که داخل این پرتلت قرار میگیرد.
با این کار این امکان برای ما فراهم می شود که از یک پرتلت برای نمایش چندین نوع داده استفاده کنیم
برای پیاده سازی این موضوع ما به ۲ جدول نیاز داریم ، یک جدول که در آن استایل پرتلت ها را نگهداری کنیم و یک جدول هم برای سناریویی که قرار است در آن پرتلت اتفاق بیفتد
در جدول اول که مربوط به ظاهر پورتلت است ما یک اسم به پرتلت اختصاص می دهیم و نام یک فایل سی اس اس که کدهای کلاس مربوط به آن را در داخلش قرار می دهیم ،
و شما تنها نیاز دارید یک فایل پی اچ پی مثلا با اسم دیفالت بسازید که شامل کلاس هایی برای ساخت هدر ، فوتر و رنگ بندی باشد که مقادیر این کلاس ها را از فایل سی اس اس معرفی شده می خواند و اطلاعاتی هم که باید در این فایل پی اچ پی چیده شود از طریق جدول دوم که سناریو را تولید می کند تولید و به آن ارسال می شود
[left]
TABLE PORTLETS
id name cssFileAddress senario_id
1 topPages /css/redProtlets.css 1
2 lastPages /css/bluePortlets.css 2
…
TABLE PORTLET-SENARIO
id name bissrule
1 topPage 'active = 1 AND is_top =1 orderBy date DESC limit 5 ’
2 lastPages ‘active = 1 date DESC limit 5’
…
[/left]
حالا کاری که باید بکنیم اینه که بگیم گه چه پرتلتهایی باید در کدام باکس ها قرار گیرند
[left]
TABLE BOX-PORTLETS
id box_id portlet_id
1 1 1
2 1 2
…
[/left]
حالا باید مدلها را بسازید و ارتباطات را تعریف کنید
حالا شما می توانید تنها با چند تا حلقه تو در تو اطلاعات را از این جداول استخراج و در صفحات نمایش بدهید که یه چیزی میشه تو این مایه ها
[left]
$layoutID = 1;
$page = Pages::model()->findByPk($layoutID);
$boxes = $page->pageBoxRelation; // pageBoxRelation is a many to many relation between Pages and Boxes
foreach($boxes as $box){
echo '<div class=" '.$box->class.' ">;
$portlets = $box->boxPortletsRelation //boxPortletsRelation is a one to many relation between box and port lets
foreach($portlets as $portlet){
$this->widgets('application.components.portlets.defaultPortlet,
array(
'portletModel' => $portlet,
)
)
}
echo '</div>';
}
[/left]
که در داخل پورتلت هم از روی مدلی که برایش ارسال کردیم بر اساس سی لس لس تعریف شده ظاهر را می سازد و با استفادا از یک رابطه یک به یک به جدول سناریو داده های داخل پورتلت را آماده می کند و نمایش میدهد .
همونطور که دیدید ایده ساده است
البته باید بگم سیستمی که در عمل پیاده کرده تعداد جداول بیشتری دارد و در جداول آن هم می توان آپشن های متنوع تری را داشت و تنها هدف من در اینجا ارائه روش بود و بسیاری از جزییات رو حذف کردم چون نمی دونستم چقدر برای شما می تونه کاربردی باشه ، برای من که بود
[/right]