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



پیاده سازی چند عملیات در یک صفحه


ارسال موضوع  ارسال پاسخ 
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
پیاده سازی چند عملیات در یک صفحه
نویسنده پیام
cake آفلاین
عضو جدید
*

ارسال‌ها: 19
تاریخ عضویت: Aug 2011
رتبه: 0
تشکر: 9
8 بار تشکر شده در 5 پست
ارسال: #1
پیاده سازی چند عملیات در یک صفحه
باسلام خدمت دوستان گرامی
باتوجه به مثال هایی که بنده در manual کیک ومطالب این فروم خوندم اکثرمطالب راجع به ارسال یک فرم دریک view همنام با action موردنظراون در controller هستش.
اینجا برای من یه سوال پیش میاد :
اگر دریک صفحه نیاز به دو یاچندعملیات یا فرم پیداکنیم ، آیاباید تمام کدهای ما درون action مستقیمش در controller باشه ؟
یعنی باید با isset چک کنیم کدام عملیات انجام شده؟
یا راه حل دیگه ای هست که بشه مستقیما action یا function دیگه ای روصدا زد؟
بعنوان مثال سه تا عملیات توی یه صفحه داریم :
1 - جستجو
2 - ارسال فرم ثبت نام
3 - ارسال نام کاربری و کلمه عبور

حالا تمام کد مربوط به هرسه عملیات باید توی یک action در controller نوشته بشه؟
یا میشه از هم جداشون کرد؟
ممنون میشم دوستان خوب
(آخرین تغییر در این ارسال: 2012/01/30 10:42 PM توسط cake.)
2012/01/30 10:32 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : saleh
saleh آفلاین
Administrator
*******

ارسال‌ها: 995
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 402
875 بار تشکر شده در 563 پست
ارسال: #2
RE: پیاده سازی چند عملیات در یک صفحه
درود بر شما.
برداشت شما کاملا اشتباه هست.

مباحث لایه نمایشی یا لایه ویو فقط به یک ویو برای هر اکشن ختم نمیشه، در لایه نمایش ما لایوت هم داریم. المنت هم داریم و در کیک 2.1 مبحثی به نام view-block داریم.

به صورت پیش فرض هر اکشن می تونه یک view مختص خودش داشته باشه. اما این دلیل نیست که فرم های شما که در یک view نمایش داده میشوند حتما به همون اکشنی که view رو رندر کرده درخواست بفرستند.

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

کد PHP:
echo $this->Form->create'User', array( 'url' => array( 'controller'=>'User''action' => 'logoin' ) ) );
echo 
$this->Form->end('submit');


echo 
$this->Form->create'Post', array( 'url' => '/posts/add') );
echo 
$this->Form->end('submit');

...
.. 
2012/01/31 07:00 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : cake payamsp
cake آفلاین
عضو جدید
*

ارسال‌ها: 19
تاریخ عضویت: Aug 2011
رتبه: 0
تشکر: 9
8 بار تشکر شده در 5 پست
ارسال: #3
RE: پیاده سازی چند عملیات در یک صفحه
ممنون از پاسختون
من این کارو انجام دادم یعنی :
- یه action جدید توی controller نوشتم به نام مثلا search
- توی همون view قبلی یه فرم جدید گذاشتم و طبق فرمایش شما
کد PHP:
echo $this->Form->create'User', array( 'url' => array( 'controller'=>'User''action' => 'search' ) ) );
echo 
$this->Form->end('submit'); 
انجام دادم
* حالا بعدازارسال اطلاعات ، صفحه به action مربوط به search میره و از اونجا دنبال view میگرده :
The view for userController::search() was not found.

پس متد یا اکشن من توی کنترلر اصلا اجرا نشد
من اصلا قصد رفتن به صفحه دیگه ای ندارم
وحتی با redirect هم چون صفحه دوباره رندرمیشه اطلاعاتم ازبین میره
فرض من دوتا فرم جدا از هم نیست بلکه دوتا submit متفاوت با استفاده از دیتای المنت های یک فرم واحد هست
یعنی راهی برای فراخوانی یک تابع از کنترلر رو توسط یک دکمه submit میخوام
شاید من کاملا منظورشمارومتوجه نشده باشم
ممنون میشم اگه بیشتر راهنمایی بفرمایید
مخلص شما Smile
(آخرین تغییر در این ارسال: 2012/01/31 09:57 PM توسط cake.)
2012/01/31 09:38 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 995
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 402
875 بار تشکر شده در 563 پست
ارسال: #4
RE: پیاده سازی چند عملیات در یک صفحه
درود بر شما

نقل قول:نجام دادم
* حالا بعدازارسال اطلاعات ، صفحه به action مربوط به search میره و از اونجا دنبال view میگرده :
The view for userController::search() was not found.

پس متد یا اکشن من توی کنترلر اصلا اجرا نشد
اشتباه میکنید. اکشن شما اجرا شده که به دنبال view می گرده و چون ویو ایی پیدا نمی کنه این خطا برای شما ایجاد میشه.

من متوجه منظورتون شدم. اما چون نمی دونم نیاز واقعی شما چی هست . نمی تونم به درستی راهنمایی کنم.

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

پس بهتره شما نیاز خودتون رو با یک مثال واقعی توضیح بدید. تا توضیح مناسب رو خدمتتون عرض کنم.
درضمن بفرمائید از چه ورژن کیک بهره میگیرید و ایا از ajax استفاده می کنید یا می خواهید استفاده کنید یا خیر
2012/02/01 04:19 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
cake آفلاین
عضو جدید
*

ارسال‌ها: 19
تاریخ عضویت: Aug 2011
رتبه: 0
تشکر: 9
8 بار تشکر شده در 5 پست
ارسال: #5
RE: پیاده سازی چند عملیات در یک صفحه
با درود دوباره و تشکر ویژه از شما
ببینید من یه فرم دارم که مربوط به یه سند درمانی بیمه ای هست
که درنهایت با یه عمل submit اطلاعات در صفحه add ارسال و ذخیره میشه
تا اینجا مشکلی نیست
اما داخل این فرم دکمه دیگه ای هم هست که سابقه شخص بیمه شده رو قبل از ارسال اطلاعات به ما میده
که این غملیات هم براساس فیلدهای همون فرم محاسبه میشه
حالا نکته همینجاس
که من اطلاعات رو به action مربوط به گرفتن گزارش یعنی report میفرستم
اما نتیجه رو درهمین صفحه (add) میخوام ببینم نه صفحه دیگه ای
درصورتی که بعدازاجرای action در controller ، دنبال view هم نام با متد جدید (report) میگرده
درضمن فعلا از ajax استفاده نمیکنم و ورژن من 1.3.8 هستش
باز هم ممنون
(آخرین تغییر در این ارسال: 2012/02/01 05:23 PM توسط cake.)
2012/02/01 02:59 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 995
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 402
875 بار تشکر شده در 563 پست
ارسال: #6
RE: پیاده سازی چند عملیات در یک صفحه
درود مجدد

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

اما اگر می خواهید به روش معمولی عمل کنید. باید یک اکشن ثابت رو در نظر بگیرید و با کمک پارامتر های که بهش ارسال میشه نتیجه رو ایجاد کنید.

به عنوان مثال :

شما باید روی دکمه مورد نظرتون این لینک رو ایجاد کنید.
کد PHP:
echo $this->Html->link('دریافت اطلاعات',array('action' => 'add' 'customer' => 'test' )); 
حال وقتی رو این کلیک میکنید. در واقع دارید درخواست به صورت get می فرستید که یک پارامتر همراهشه.
حالا در اکشن add شما باید پارامتر های ارسالی رو بررسی و دیتا لازم رو به ویو بفرستید.
کد PHP:
public function admin_add(){
        
$this->actionTitle 'جدید';
        if (
$this->request->is('post'))
        {
            
$this->News->create();

            if (
$this->News->save($this->request->data))
            {
                
$this->Irsa->IrsaFlashRedirect('ذخيره شد', array('action' => 'index'));
            }

        }
        
        if ( isset( 
$this->request->params['pass']['customer'] ) ){
            .......
$this->set('customerRes', ..... );
        } 

پس اینجا چون دارید مجدد ویو add رو رندر میکنید. می تونید چک کنید که ایا متغیری به نام customerRes در ویو وجود دارد یا خیر. اگر داشت عملیات رندر مربوطه به نمایش کاستومر رو انجام بدید.
2012/02/03 03:24 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : cake
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: