ورود

View Full Version : فراخوانی چندین متد از کنترلر های دیگر به همراه متد جاری



numberone1
سه شنبه 25 خرداد 1395, 14:38 عصر
سلام

من دارم تازه CI یا میگیرم.
تو همه آموزش هایی که دیدم مستر پیج درست میکنن ولی هدر و فوتر یا ساید بار بصورت استاتیک لود میشه.
من میخوام ببینم مثلا اگر منو های سایت من توی هدر و فوتر باشه چجوری میتونم توی تمام صفحه ها از دیتابیس فراخوانی کنم بصورت پیش فرض

plague
سه شنبه 25 خرداد 1395, 17:30 عصر
میتونی توی helper تابع بنویسی برای خوندن اون موارد از دیتابیس
تابع های توی هلپر از همه جا قابل فراخانی هستن حتی از view

روش حرفه ای تر که من ترجیح میدم اینه که یدونه کنترلر پدر میزارم و همه کنترلر هام رو از اون extend میکنم.
به صورت دیفالت همه کنترلر ها از کنترلر فرم ورک یعنی CI_Controller رو extend میکنن
من میام یه کنترلر میزارم بین اینها
در واقع رابطه پدر- فرزند رو تبدیل میکنم به رابطه پدربزرگ - پدر - فرزند

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

numberone1
سه شنبه 25 خرداد 1395, 20:23 عصر
یه سوال دیگه هم داشتم
اگر من بخوام از یک کنترلر دیگه توی کنترلر که با url فراخوانی کردم استفاده کنم باید چیکار کنم؟
مثلا فرض کنید من یک کنترلر دارم برای نمایش محصولات
یک کنترلر هم دارم مربوط به دسته بندی ها
حالا توی صفحه نمایش محصول من با url کنترلر اول که مربوط به نمایش محصولات هست رو فراخوانی میکنم ولی میخوام داخلش دسته بندی های مرتبط بهش رو هم نشون بدم.

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

plague
سه شنبه 25 خرداد 1395, 20:40 عصر
جوین رو برای رابطه 1 به 1 میزنن
با توجه به اینکه شما گفتی دسته بندی ها ... احتمال میدم که رابطه 1 به چند باشه (1 محصول -> چندین دسته ) که در این مورد جوین جواب نمیده
شما چند تا راه داری :

1 - ممکنه چینش کد های شما غلط باشه شما 1 کنترلر برای محصولات میسازی و همه کد های مربوط به محصولات و موارد جانبیشون مثل دسته بندی ها رو میریزی توی اون نه اینکه دسته بندی رو تو کنترلر جدا بریزی

2 - از هلپر استفاده کن توابع هلپر میتونن از هرجا فراخانی بشن و معمولا کد های تکراری که مربوط به کنترلر خاصی نیستند رو اونجا میریزیم برای جلوگیری از تکرار (لایبراری هم مثل هلپر هستن ولی اونا کلاس هستن - هلپر ها تابع معمولی )

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

$this->input->get('s');


در حالی که متدی به اسم inputو get تو صفحه نداریم
کنترلر شما داره از کنترلر پدرش ارث میبره و این تابع توی کنترلر پدر تعریف شده

numberone1
چهارشنبه 26 خرداد 1395, 01:25 صبح
منظورم این بود که مثلا شما صفحه ایندکس سایت دیجی کالا رو فرض کن
هم کنترلر محصولات داره (با فرض اینکه همه متد های محصولات مشابه و امتیاز دهی و قیمت دهی و ... همه تو یک کنترلره)
هم کنترلر خبر داره
هم کنترلر ویدئو داره

چجوری همه کنترلر هارو یه جا فراخوانی کرده؟

plague
چهارشنبه 26 خرداد 1395, 12:47 عصر
این که یه چیزایی رو از دیتابیس بخونه و نمایش بدی به این معنی نیست که کنترلر اونا رو فراخانی کرده
این مدل هستش که با دیتابیس ارتباط داره
شما توی کنترلر میتونی هر مدلی رو فراخانی کنی و استفاده کنی


الان من 10 مورد آخرین اخبار و ویدئو ها رو توی هر کنترلری میتونم اینجوری به دست بیارم بدون اینکه کنترلر خاص اونها نقشی داشته باشه



$this->load->model('news_mode');
$data['lastest_news'] = $this->news_model->get( $limit = 10);

$this->load->model('video_model');
$data['lastest_videos'] = $this->video_model->get( $limit = 10);