تجربیات کاربردی با فرم ورک یی

[right]

با سلام

من مطمئنم که اکثر دوستانی که در این فروم حضور دارن برنامه نویسان بسیار قوی و خبره ای هستند و توانمندی بالایی در زمینه های کاری خودشون دارند و هر کس هم تجربیات بسیار ارزنده ای در پروژه هایی که انجام دادند پیدا نموده اند . لذا هدف من در اینجا نه پرداختن به اینه که یی چی هست و چجوری باید باهاش کار کرد ، بلکه هدف اینه که به دید یه ابزار بسیار قوی بهش نگاه کنیم که میتونه باعث بشه ما در زمان کمتر ، کدهای بهینه تری و با کارایی بالاتری تولید کنیم .

یکی از دلایلی که من به فرم ورک ها علاقه دارم اینکه باعث شدن من به جای اینکه نگران برنامه نویسی سایت ها باشم ، این فرصت رو در اختیار من قرار دادن که بیشتر روی لاجیک و فلسفه سیستم کار کنم ، به عبارت دیگر دید سیستماتیک بهتری به کاربرانش میده .

پس با اجازه دوستان می خوام بیشتر در اینجا در مورد تحلیل و طراحی سیستم های تحت وب با استفاده از ابزارهای یی بپردازم و برای این کار به همفکری شما هم نیاز دارم

با تشکر

حسین

[/right]

یی چیست؟ ابزار بسیار قوی که میتونه باعث بشه ما در زمان کمتر ، کدهای بهینه تری و با کارایی بالاتری تولید کنیم

سلام

البته هدف اصلی از همه فریم ورک ها چه تحت وب چه دسکتاپ کوتاه کردن زمان کد نویسی و بهینه تر کردن کدهاست. در مورد یی البته این فریم ورک جدید و مترقی هست که خیلی کار کردن باهاش می تونه کد نویسی رو راحت کنه. آیا شما به جنبه هایی خارج از امکانات خود فریم ورک اشاره دارید یا هدفتون معرفی همون جنبه هایی هست که در خود فریم ورک دیده شده؟

من یک سوال هم داشتم. در کتاب

Web Application Development with Yii and PHP

برای ارسال ایمیل در یی از توسعه های زند استفاده شده. آیا خود این فریم ورک برای این کار توسعه ای نداره؟

[right]

سلام

منظور من استفاده از تکنیک هاییه که ما برای پیاده سازی سرویس ها و برای حل مسئله ازش استفاده می کنیم و تقریبا مستقل از زبان یا فرم ورکی که ما می خوایم باهاش کار کنیم باید باهاش رو به رو بشیم .

به عنوان مثال شما دوستان چه روش هایی برای بالا بردن قابلیت استفاده مجدد از سیستم ها پیشنهاد می کنید ، مسلما منظور من ماژول نویسی در سطح برنامه نویسی نیست . در سطح کلی سیستمه

یا اینکه برای افزایش سرعت سیستم ها از چه نوع معماری استفاده می کنید ؟

و یا بسیاری از مسائلی که به نظرم قبل از اینکه بخوایم وارد فاز کد نویسی و استفاده از فرم ورک بشیم باید بهشون جواب بدیم .

و در مرحله بعد هم چطور از یی استفاده کنیم تا بتونیم اجراشون کنیم .

[/right]

[rtl][font="Tahoma"]بحث خوبیست، فکر میکنم منظور صحبت درمورد مباحث Design Patterns باشه؟

[/font][/rtl]

[right]

آره یه چیزی تو همون مایه ها !!

[/right]

[rtl][font=“Tahoma”]خوب بسمه اله… گوش میدیم :)

[/font][/rtl]

[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]

[rtl][font="Tahoma"]ممنون.

خب این روش برای یک پورتال عمومی تا حدودی میتونه کار رو راه بندازه و نقطه شروع خوبی میتونه باشه و البته جای توسعه زیاد داره.

پ.ن: برخلاف تصورم، این مبحث هیچ ارتباطی به مباحث Design Patterns ندارد.

[/font][/rtl]