زمان جاری: 2012/05/23, 03:52 AM خوش آمدید مهمان گرامی! (ورودعضویت)



سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)


ارسال موضوع  ارسال پاسخ 
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
نویسنده پیام
person آفلاین
عضو جدید
*

ارسال‌ها: 16
تاریخ عضویت: Jul 2011
رتبه: 0
تشکر: 18
2 بار تشکر شده در 1 پست
ارسال: #1
سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
سلام
من یه هفته ای میشه که کیک کار می کنم، تو این مدت تنها سوالی که در مورد کیک نتونستم جوابی براش پیدا کنم در مورد ابزارک هاست (....,widgets, blocks, partials)
فرض کنیم توی پروژه مون بخشی داریم مربوط به نمایش ویدیوهای ارسالی کاربران، بخشی هم مربوط به مقالات هست و یه بخشی هم برا دانلود داریم، حالا میخایم توی تمام صفحات آخرین ویدیوهای ارسالی و آخرین مقالات ارسالی و آخرین فایل ها رو در قالب سه تا ابزارک نشون بدیم.
سوال من اینه که با توجه به اینکه هر کدوم از این ابزارک ها با یه جدول تو بانک اطلاعاتی سر و کار دارن چطور میشه این کارو به صورت اتوماتیک انجام داد؟
راهکارهایی که بررسی کردم ایناس:
۱- elements: ابزارک های ذکر شده نیاز به منطق دارن، مثلن در صورتی که ویدیویی توی بانک نبود ابزارک پیغام بده که ویدیویی یافت نشد، به همین دلیل نمیشه از المنت استفاده کرد.
۲- helper: عدم دسترسی به مدل ها و ویوها توی هلپرها من رو به این نتیجه میرسونه که هلپرها اساسن برا همچین کاری درست نشدن، هرچند میشه مدل ها و ویوها رو توی هلپرها رجیستر کرد و ازشون استفاه کرد.

اینجا یه چیزایی در مورد mini controller خوندم که ظاهرن چاره این کاره ولی متاسفانه زیاد سر در نیاوردم.
فکر می کنم دوستان باتجربه حتمن چاره ای برای این کار اندیشیدن، ممنون میشم اگه دانسته هاتون رو به اشتراک بزارین.
2011/07/21 10:29 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ghasem.fattahpour آفلاین
Super Moderator
******

ارسال‌ها: 234
تاریخ عضویت: Aug 2010
رتبه: 7
تشکر: 176
241 بار تشکر شده در 114 پست
ارسال: #2
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
با احترام
من هم قبلا چنین مشکلی رو داشتم. همیشه سعی کن که تمامی اطلاعات database رو در طرف کنترلر دریافت کنی و بعد به view یا element یا ... انتقال بدی. حالا شما ۲ اتفاق پیش رو داری:
۱. می خواهی این اطلاعات در تمامی صفحات دیده بشوند. باید در appcontroller اطلاعات رو در before render واکشی کنی و به صفحه ارسال کنی.
۲. تنها در یک element یا یک قسمت خاص view. شما می تونی بر عکس عمل کنی یعنی از view یا element عملیات requestAction انجام بدی. یعنی یک action رو فراخوانی کنی.
مطالعه بیشتر :
http://book.cakephp.org/view/991/requestAction

موفق باشی

آنچه می نویسم نشانه دانایی من نیست، نشانه آنچه می دانم است.
---------------------------------------------------------------------------
(آخرین تغییر در این ارسال: 2011/07/21 12:43 PM توسط ghasem.fattahpour.)
2011/07/21 11:56 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : person
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #3
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
دردود بر شما.

من منظور شما رو از اتوماتیک متوجه نشدم.

اما برای حل این مشکل شما باید اول یک المنت ایجاد کنید. فرضا lastpost.ctp

حال داخل این المنت به دو طریق می توانید اطلاعات مورد رو فرا خوانی و نمایش دهید

کد PHP:
1.$this->requestAction()

2ClassRegistry::getObject('Post')->find('all'); 

در پایان هر جا که خواستید می تونید. این المنت رو فراخوانی کنید.
(آخرین تغییر در این ارسال: 2011/07/21 12:05 PM توسط saleh.)
2011/07/21 11:59 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : person ghasem.fattahpour
person آفلاین
عضو جدید
*

ارسال‌ها: 16
تاریخ عضویت: Jul 2011
رتبه: 0
تشکر: 18
2 بار تشکر شده در 1 پست
ارسال: #4
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
(2011/07/21 11:59 AM)saleh نوشته است:  من منظور شما رو از اتوماتیک متوجه نشدم.
منظور اینه که فقط یه بار اطلاعات از بانک خونده بشه و تو صفحات نشون داده بشه

requestAction ظاهرن چاره کاره، منتها یه ایرادی وجود داره، اینکه متد مربوطه که داخل المنت توسط requestAction فراخوانی میشه از طریق url هم در دسترسه، به عنوان مثال تو همون مثال کتاب که دوستمون ghasem.fattahpour لینکش رو دادن متد latest() از طریق url زیر قابل دسترسی:
کد:
/comments/latest
و این با مفهومی که من از ابزارک در فریمورک های دیگه مثل CI, Yii,... یاد گرفتم نمی خونه، نظر شما چیه؟
2011/07/21 12:24 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ghasem.fattahpour آفلاین
Super Moderator
******

ارسال‌ها: 234
تاریخ عضویت: Aug 2010
رتبه: 7
تشکر: 176
241 بار تشکر شده در 114 پست
ارسال: #5
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
اگر شما بخواهید که تنها یکبار اطلاعات رو از پایگاه داده دریافت کنید باید از Cache استفاده کنید.
cake در این زمینه خیلی قوی عمل کرده.

کد PHP:
<?php echo
    
$this->element('helpbox',
    array(
    
"helptext" => 'This is passed to the element as $helptext',
    
"foobar" => 'This is passed to the element as $foobar',
    
"cache" => "+2 days"//sets the caching to +2 days.
    
"plugin" => "" //to render an element from a plugin
    
)
    );
    
?>

یا

کد PHP:
<?php
    
echo $this->element('helpbox', array('cache' => array('key' => 'first_use''time' => '+1 day'), 'var' => $var));
    echo 
$this->element('helpbox', array('cache' => array('key' => 'second_use''time' => '+1 day'), 'var' => $differentVar));
    
?>



مطالعه بیشتر :
http://book.cakephp.org/view/1083/Caching-Elements

آنچه می نویسم نشانه دانایی من نیست، نشانه آنچه می دانم است.
---------------------------------------------------------------------------
(آخرین تغییر در این ارسال: 2011/07/21 12:52 PM توسط ghasem.fattahpour.)
2011/07/21 12:50 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : saleh person
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #6
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
زمانی که شما از requestAction استفاده می کنید. یک پارامتر به سیستم ارسال میشه که نشون میده درخواست داخلی هست نه خارجی

آموزشش هم در این تاپیک توسط پیام عزیز قرار داده شده :
کد:
http://forum.cakephp.ir/thread-33-post-1648.html#pid1648

اما همینطور که گفتم بهترین راه استفاده مستقیم از مودل ها هست. من یک مثال میزنم همانند yii

کد PHP:
//view

echo $this->elements('lastpost',array('limit'=>10));


//lastpost.ctp

$dataClassRegistry::getObject('Post')->find('all',array('limit'=>$limit)); 

foreach (
$data as $post)
echo ..... 
2011/07/21 12:51 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : person ghasem.fattahpour Arman_gh payamsp
Arman_gh آفلاین
تازه کار
*

ارسال‌ها: 24
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 8
15 بار تشکر شده در 10 پست
ارسال: #7
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
جناب صالح این مثال شما از لحاظ آسانی پیاده سازی و تمیزی کد همپای requestAction است. سوالی که داشتم این که مشکلات requestAction را ندارد؟ مشکلاتی مثل کندی اجرا یا سختی دیباگ کردن.
2011/07/21 07:53 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
parsig آفلاین
Super Moderator
******

ارسال‌ها: 323
تاریخ عضویت: Jan 2010
رتبه: 6
تشکر: 131
357 بار تشکر شده در 179 پست
ارسال: #8
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
با سلام و خوش آمد گویی خدمت شما
نه این روش اون مشکلات رو نداره .
ولی من شخصا ترجیه می دم این کوئری ها رو توی app_controller انجام بدم که MVC رو هم رعایت کرده باشم !

[تصویر: ubuntu2_userbar.gif]
یک برنامه نویس
آنکه مست آمد و دستی به دل ما زد رفت ... در این خانه ندانم به چه سودا زد و رفت
2011/07/21 07:58 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : ghasem.fattahpour person
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #9
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
(2011/07/21 07:53 PM)Arman_gh نوشته است:  جناب صالح این مثال شما از لحاظ آسانی پیاده سازی و تمیزی کد همپای requestAction است. سوالی که داشتم این که مشکلات requestAction را ندارد؟ مشکلاتی مثل کندی اجرا یا سختی دیباگ کردن.

در کار کردن با requestAction کندی زمانی نمایان میشه که شما دیباگ رو 0 نکرده باشید. اما تا الان بحث سختی دیباگ من تا الان بر نخوردم.

اما 2 تفاوت عمده با هم دارند. در requestAction همانند یک درخواست عمل میشه . یعنی دیسپتچر و روتر و ..... همه فرا خوانده میشند خوب اینجا ما یک پروسس داریم. مورد دیگر این هست که acl و auth اعمال میشه. این خودش یک مزیت خوبی هست برای بعضی موارد.


اما در حالت دوم این موارد دیده نمی شه و خیلی سریعتر عمل میکنه.

باید در انتخابش دقت کنید.
2011/07/21 08:03 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : payamsp person
Arman_gh آفلاین
تازه کار
*

ارسال‌ها: 24
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 8
15 بار تشکر شده در 10 پست
ارسال: #10
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
من هم همین باور شما رو داشتم ولی در خود راهنمای کیک گفته شده که بکارگیری از این روش هیچ منافاتی با اصول MVC نداره. در اینجا
http://book.cakephp.org/view/1081/Elements
خودم هم که فکر کردم دیدم منافاتی نداره شما فقط اکشن رو از یک ویوی درخواست میدید و هیچ عملیات منطقی در ویو انجام نمیشه.
2011/07/21 08:14 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #11
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
من نگفتم منافاتی داره؟؟ گفتم چون مثل یک درخواست عمل میشه . پروسس و عمنلیات زیادی نسبت به روش دوم داره.
2011/07/21 08:24 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
Arman_gh آفلاین
تازه کار
*

ارسال‌ها: 24
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 8
15 بار تشکر شده در 10 پست
ارسال: #12
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
نه اشتباه شده من در پاسخ با آقا مرتضا گفتم. جناب صالح شما در پروژه هاتون از کدام روش استفاده میکنید. requestAction یا فراخوانی آبجکت؟
2011/07/21 08:29 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
870 بار تشکر شده در 560 پست
ارسال: #13
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
من طبق نیازم استفاده میکنم. در بیشتر موارد از فراخوانی کلاس ها استفاده میکنم.

اما در ماژول های سی ام اس که دارم پیاده سازی مکنم. مثلا برای نمایش لیتست صفحات از requestAction استفاده کردم
2011/07/22 10:10 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : ghasem.fattahpour
ghasem.fattahpour آفلاین
Super Moderator
******

ارسال‌ها: 234
تاریخ عضویت: Aug 2010
رتبه: 7
تشکر: 176
241 بار تشکر شده در 114 پست
ارسال: #14
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
آقا صالح دقیقا راه حل صحیح رو فرمودند! بنده خودم زیاد با فراخوانی آبجکت موافق نیستم چون معماری تا جایی که بشه باید رعایت بشه.

آنچه می نویسم نشانه دانایی من نیست، نشانه آنچه می دانم است.
---------------------------------------------------------------------------
2011/07/22 03:08 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
person آفلاین
عضو جدید
*

ارسال‌ها: 16
تاریخ عضویت: Jul 2011
رتبه: 0
تشکر: 18
2 بار تشکر شده در 1 پست
ارسال: #15
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
اینجوری که دوستان گفتن استفاده از requestAction معایبی داره، استفاده از روش زیر که آقای صالح فرمودن هم به اعتقاد من ایراد داره:
(2011/07/21 12:51 PM)saleh نوشته است:  
کد PHP:
//view

echo $this->elements('lastpost',array('limit'=>10));


//lastpost.ctp

$dataClassRegistry::getObject('Post')->find('all',array('limit'=>$limit)); 

foreach (
$data as $post)
echo ..... 
به نظر شما در صورت استفاده از این روش اصل استقلال نما از منطق رو رعایت کردیم؟
(آخرین تغییر در این ارسال: 2011/07/23 11:29 AM توسط person.)
2011/07/23 11:28 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
Arman_gh آفلاین
تازه کار
*

ارسال‌ها: 24
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 8
15 بار تشکر شده در 10 پست
ارسال: #16
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
ایرادی نداره شما فقط درخواستی از نما به مدل میکنید. عملیات منطقی در نما انجام نمیشه و در همان مدل انجام میگیره
2011/07/23 12:35 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : person
person آفلاین
عضو جدید
*

ارسال‌ها: 16
تاریخ عضویت: Jul 2011
رتبه: 0
تشکر: 18
2 بار تشکر شده در 1 پست
ارسال: #17
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
میدونم که پروسس در مدل انجام میشه ولی باز هم به نظر من این جور کدنویسی برخلاف قواعد MVC باشه، فرض کنید تو نسخه بعدی کیک سینتکس مربوط به کار با بانک توی مثال فوق تغییر کنه، اون وقت شما مجبوری نماها رو هم تغییر بدی.
نظر شما چیه؟
2011/07/23 01:22 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
Arman_gh آفلاین
تازه کار
*

ارسال‌ها: 24
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 8
15 بار تشکر شده در 10 پست
ارسال: #18
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
اگر قرار باشه بر این پایه کد بنویسیم که در نسخه بعد ممکنه فلان بخش عوض بشه، اصلا نباید کد بنویسیم. موضوع ریفکتورینگ برای همین ساخته شده. و اینکه باید با هر تغییر نسخه فریمورک نرم افزار رو هم تغییر داد امری عادی در دنیای نرم افزاره. همانطور که در پست های بالا هم گفتم در خود راهنمای کیک گفته شده که این موضوع بر خلاف اصول MVC نیست. حالا فرض کنیم که بر خلاف اصول MVC هم باشه که نیست. اصول MVC که وحی منزل نیست. بنده هر جا که ببینم کاری که میخوام انجام بدم اگر با اصول MVC بخواد انجام بشه زمان و کار بیشتری میبرم یک راه میانبر براش پیدا میکنم.
2011/07/23 02:07 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : person ghasem.fattahpour saleh
person آفلاین
عضو جدید
*

ارسال‌ها: 16
تاریخ عضویت: Jul 2011
رتبه: 0
تشکر: 18
2 بار تشکر شده در 1 پست
ارسال: #19
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
اینکه نما و منطق باید از هم جدا باشه بر کسی پوشیده نیست، مثال های دیگه ای هم هست که این لزوم رو نشون میده (اینکه مثال خوبی نزدم رو بزارین به حساب دو روز نخوابیدنم). بسیاری (من جمله خودم) بر این باورن که در نماها حتا از کد پی اچ پی هم استفاده نشه و نما همانطور که از اسمش هم پیداس صرفن یه سری متغیر رو از کنترلر بگیره و نمایش بده.

هیچ قانونی توی دنیا وحی منزل نیست، می دونم، صحبت از اینه که کدام راه مشکلات کمتری رو به دنبال داره و توسعه برنامه رو سهل تر می کنه. من اصلن تا به حال اینطوری (هر گونه پردازش توی نما) کد ننوشتم، می خام بدونم توی کیک هم میتونم اینجوری کد ننویسم؟
2011/07/23 03:53 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : ghasem.fattahpour saleh
Arman_gh آفلاین
تازه کار
*

ارسال‌ها: 24
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 8
15 بار تشکر شده در 10 پست
ارسال: #20
RE: سوال در مورد ابزارک ها (widgets,blocks,partials or moduls)
توی کیک هم میشه بدون پردازش در نما کد نوشت. و تنها متغیرهایی که از کنترلر پاس داده شده رو نمایش داد. ولی کمی کدنویسی بیشتر میشه. مثال میزنم. برای یه ویجت مثل ورود اعضا که دو نما داره. یکی بخشی که یوزر و پس رو وارد میکنید. یکی هم که اطلاعات کاربر رو نمایش میدید. میتونید برای هر کدام نمای جداگانه ای بسازید و نمای مربوط به هر حالت رو از طریق کنترلر لود کنید. یا راه ساده‌تر در همان نمای کنترلر (درون خود نما) با هلپر session تشخیص بدید که کاربر لوگین کرده یا نه اگر لوگین کرده بود یه سری کد HTML رو از توی همان نما نمایش بدیم نبود یه سری دیگه. من راه دوم رو ترجیح میدم مشخصل شما راه اول رو.روش من با اصول MVC مغایر ولی من ترجیحش میدمBig Grin
2011/07/23 04:32 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: