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



beforFind???????


ارسال موضوع  ارسال پاسخ 
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
beforFind???????
نویسنده پیام
mimre آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Apr 2010
رتبه: 0
تشکر: 14
12 بار تشکر شده در 6 پست
ارسال: #1
beforFind???????
سلام.
مشکلی که من دارم اینه:
به عنوان مثال من یک وبلاگ ساختم که امکان این رو داره که برای هر پست کامنت گذاشته بشه.
حالا میخوام کامنت هایی که وجود داره رو بدون این که پاک کنم از حالت نمایش عمومی خارج کنم.
کاری که من کردم اینه که برای کامنت ها یک ستون اضافه کردم به اسم status کامنت هایی که قراره نمایش داده نشن مقدار 0 میگیرن
حالا سوال من اینه که دقیقا کجا باید این رو چک بکنم؟ توی beforFind ؟ اگه آره کدوم model ؟

سپاس از همه دوستان
2011/08/12 02:22 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 694
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 259
501 بار تشکر شده در 373 پست
ارسال: #2
RE: beforFind???????
درود بر شما


جوابب شما beforFind نیست. کاربرد این کالبک ها فراتر از این کاراست

شما در جایی که دارید کوئری به مدل مفرستید باید ایین کارو ببکنید. یعنی در کنترلر. و در دستورات find شرط لازم رو قرار بدید/.
2011/08/12 06:36 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
mimre آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Apr 2010
رتبه: 0
تشکر: 14
12 بار تشکر شده در 6 پست
ارسال: #3
RE: beforFind???????
البته این اولین راه حلی بود که به ذهن خودمم رسید ولی جایی دادم که نوشته بود برای محدود کردن نتایج توی beforfind باید این کار رو بکنم.
در ضمن من قصدم اینه که به شکل پیش فرض کامنت هایی که از حالت نمایش عمومی حارج میشن دیگه هیچ جا نشه نمایش داده بشه. یعنی قرار نباشه هر کجا جداگانه چک بشه که این کامنت اجازه نمایش داره یا نه

با توجه به این که توی کنترلر به صورت اتوماتیک این کامنت هایی که به پست مربوط میباشند رو واکشی میکنه.
2011/08/12 07:46 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 694
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 259
501 بار تشکر شده در 373 پست
ارسال: #4
RE: beforFind???????
خوب اینجا شما بخش ادمین دارید. و حالت حالت های دیگر. نمی تونیید کلی تعریف کنیید. مگر اینکه شناخت کامل بر این موضوع داشته باشید.
2011/08/12 07:53 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
mimre آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Apr 2010
رتبه: 0
تشکر: 14
12 بار تشکر شده در 6 پست
ارسال: #5
RE: beforFind???????
متوحه منظورتون نمیشم...
یعنی نمیشه اینو کنترل کرد؟ که کامنت هایی که از حالت نمایش حارج شدن رو از دیتا بیس اصلن بیرون نکشیم

من اون فیلد رو تعریف کردم که کامنت هایی که نمیحام به صورت عمومی نمایش داده بشن رو مشخص کنم . درست هم کار میکنه ولی توی صفحه پست (مطلب که کامنت مال اونه) تمام کامنت ها نمایش داده میشن. چه تایید شده ها چه تایید نشده ها
2011/08/12 09:21 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 694
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 259
501 بار تشکر شده در 373 پست
ارسال: #6
RE: beforFind???????
شدنش میشه، کار نشد نداره. اما این موارد رو اینطوری نباید فیلتر کرد.

شما برای هر کنترلر دو تا آدرس دارید.
کد:
/post/index
/admin/post/index

که اولی function index() هست شما اینجا میخاهید نظرات تائید شده نمایش ندید.
کد PHP:
$this->post->comment->find(all , array('conditions)= >arrayy('status => 1)); 


اما تو محییط ادمین که باید همه رو نمایش بدید
کد PHP:
$this->post->comment->find(all(; 

در اصل این موارد رو ایینجا باید فیلتر کنید.
2011/08/13 01:08 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : payamsp
mimre آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Apr 2010
رتبه: 0
تشکر: 14
12 بار تشکر شده در 6 پست
ارسال: #7
RE: beforFind???????
(2011/08/13 01:08 AM)saleh نوشته است:  شدنش میشه، کار نشد نداره. اما این موارد رو اینطوری نباید فیلتر کرد.

شما برای هر کنترلر دو تا آدرس دارید.
کد:
/post/index
/admin/post/index

که اولی function index() هست شما اینجا میخاهید نظرات تائید شده نمایش ندید.
کد PHP:
$this->post->comment->find(all , array('conditions)= >arrayy('status => 1)); 


اما تو محییط ادمین که باید همه رو نمایش بدید
کد PHP:
$this->post->comment->find(al(; 

در اصل این موارد رو ایینجا باید فیلتر کنید.

کدی که دادین مشکلش اینه که تمام کامنت ها رو نشون میده.
و صفحه من اینه
کد:
/post/view/222
یعنی من میخوام کامنت های مربوط به پست بخصوصی رو ببینم. این مشکل برای index حل شده.
کاری که من کردم اینه که بعد از واکشی کامنت ها از دیتا بیس اون کامنت هایی که نباید منتشر بشن رو از توی آرایه مربوطه (توی اکشن ویووی کنترولر) حذف میکنم.
اینجوری مشکلم حل شده ولی نمیدونم که این روش درستی هست یا نه؟ یعنی آیا این برنامه من رو و الگوریتم اکشن رو سنگین میکنه؟ کاری که کردم منطقی هست و از نظر فنی درسته یا نه؟
2011/08/17 10:29 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 694
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 259
501 بار تشکر شده در 373 پست
ارسال: #8
RE: beforFind???????
روشتون کاملا اشتباه هست. مشکل شما و خیلی از دوستان این هست. که فقط به اون چیزی که نیاز دارید در اون راستا فکر میکنید.

دوست عزیز در واکشی اطلاعات در هر حالتی شما می تونید شروط مورد نظرتون رو اعمال کنید. مثاللی که زدم مطلق سوال شما نبود به صورت کلی بیان شده بود.

شما در هر کجا که نیاز دارید مثل این مورد در واکشی اطلاعات فیلتر گزاری کنید.

کد PHP:
$this->Comment->find('all' , array( 'conditions' => array( 'Comment.status' => 1) ) ); 

دیگر اینجا نیاز نیست که در خروجی فیلتر گزاری کنید. برای نمایش.
2011/08/18 12:01 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
mimre آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Apr 2010
رتبه: 0
تشکر: 14
12 بار تشکر شده در 6 پست
ارسال: #9
RE: beforFind???????
این که اون روش که گفتم اشتباه هست حدس خودم هم بود و من این مسئله رو همه جا حل کردم و فقط همینجا نتونستم حالت انتشار رو چک کنم.
به این فکر افتادم که اکر از طریق مدل این کار رو بکنم که هر رکورد که از حالت انتشار خارج شده توی نتایج جستجو نیاد روش بهتری هست. کد اولیه ای که شما دادید رو تست کردم جواب نداد (به دلیلی که گفتم)

حالا بزارید سوالم رو کمی عوض کنم:
جاهایی که رکورد های comment که به دلیل ارتباط با post واکشی میشن رو چطور میشه با کد خودم عملیات find رو انجام بدم
یعنی چطور میشه تابع find که خودم مینویسم به جای تابع find که کیک اتوماتیک استفاده میکنه اجرا بشه
کدی که شما نوشتین جواب نیست چون تمام کامنت ها رو برمیگردونه نه فقط اونهایی رو که به پست مورد نظر من مرتبط هستن
البته رفتار کننده containable که معرفی کرده بودین فکر میکنم توی این مورد هم کارایی داشته باشه
2011/08/18 08:18 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 694
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 259
501 بار تشکر شده در 373 پست
ارسال: #10
RE: beforFind???????
شما یک مشکل بزرگ دارید و اون هم عدم شناخت کافی نسبت به شی گرایی و توابع کیک هست.
شخصا تو این 3 سال یکبار نیاز پیدا کردم که find خودم رو ایجاد کنم. اون هم برای کش کردن بود. میخوام این نکته رو بگم خدمتتون که تا الان نییاز به هیچ تغییری یا اضافه کردن چیزی به کیک در این مورد نشدم.

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

درضمن یک نکته رو در مورد خودم بدونید. من همیشه سعی مییکنم در جواب هام راه درست رو نشون بدم. نه اینکه کد مورد نیاز رو اینجا بیست کنم. پس استفاده از کد های که من مییزارم. 100% جواب شما یا سایر دوستان نیست. فقط اشاره به روش صحیح هست.
2011/08/19 05:34 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 694
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 259
501 بار تشکر شده در 373 پست
ارسال: #11
RE: beforFind???????
این تاپیک رو ببینید. چه طور برای سرچ کردن و ... از find بهره بردند
کد PHP:
http://forum.cakephp.ir/thread-402-post-1819.html#pid1819 
(آخرین تغییر در این ارسال: 2011/08/19 07:21 PM توسط saleh.)
2011/08/19 07:21 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
mimre آفلاین
تازه کار
*

ارسال‌ها: 48
تاریخ عضویت: Apr 2010
رتبه: 0
تشکر: 14
12 بار تشکر شده در 6 پست
ارسال: #12
RE: beforFind???????
(2011/08/19 05:34 PM)saleh نوشته است:  شما یک مشکل بزرگ دارید و اون هم عدم شناخت کافی نسبت به شی گرایی و توابع کیک هست.
شخصا تو این 3 سال یکبار نیاز پیدا کردم که find خودم رو ایجاد کنم. اون هم برای کش کردن بود. میخوام این نکته رو بگم خدمتتون که تا الان نییاز به هیچ تغییری یا اضافه کردن چیزی به کیک در این مورد نشدم.

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

درضمن یک نکته رو در مورد خودم بدونید. من همیشه سعی مییکنم در جواب هام راه درست رو نشون بدم. نه اینکه کد مورد نیاز رو اینجا بیست کنم. پس استفاده از کد های که من مییزارم. 100% جواب شما یا سایر دوستان نیست. فقط اشاره به روش صحیح هست.

منظور من نوشتن یک تابع find برای کیک نبود. منظرم اینه که find رو با پارامتر های خودم بفرستم. چون در حالت عادی که هیچ پارامتری به find فرستاده نمیشه خود کیک تمام کامنت ها رو که مربوط به پست هستن رو واکشی میکنه.
اتوماتیک هم که گفتم به این منظور بود که خود کیک این از پارامتر های پیشفرض خودش استفاده میکنه.

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

نقل قول:این تاپیک رو ببینید. چه طور برای سرچ کردن و ... از find بهره بردند
این تاپیک رو هم که معرفی کردین مال خودم هست
ولی توی این مورد که الان درموردش دارم صحبت میکنم مشکل من اینه که پارامتر های خودم رو که به find میفرستم بدون در نظر گرفتن این که کدوم کامنت ها به پست مورد نظر من (views/posts/43) تعلق دارن عملیات find رو انجام میده. یعنی کامنت ها ممکن هست به پست دیگری تعلق داشته باشن ولی نمایش داده میشن.
نمیدونم این کمک میکنه یا نه. ولی مینویسم.
در حقیقت من میخوام اطلاعات این بخش
کد PHP:
$post['comment'
از آرایه رو کنترل کنم و اونایی رو که اجازه انتشار دارن فقط واکشی بشن.
یعنی از توی اکشن view که متعلق به یک پست هست (app/controller_post.php -> view() i) یک find بنویسم برای کامنت های متعلق به پست
ولی از طریق کوئری نتونستم این کار رو بکنم
(آخرین تغییر در این ارسال: 2011/08/24 01:52 PM توسط mimre.)
2011/08/24 01:13 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 694
تاریخ عضویت: Dec 2009
رتبه: 9
تشکر: 259
501 بار تشکر شده در 373 پست
ارسال: #13
RE: beforFind???????
نمی دونم چی تو ذهنتون هست که این قدر این مورد رو تو ذهنتون پیچیده کردید.

کد PHP:
function view($id){
$post $this->Post->read(null,$id);
$commpents $this->Post->Comment->findAllPostId($id);


لاین دستیش.

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

این به صورت کلی میشه. اما اگر میخواهید در یک جا شرط شما عمل بشه در کیجا اعمل نشه. باید از روش ایجاد ارتباط در هوا (چی ترجمه کردم Smile) ) استفاده کنید. یعنی قبل از زمان واکشی همون لحظه ارتباط پست رو با مدل کامنت ایجاد کنید.
2011/08/25 10:19 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: