July 20, 2011 at 10:45 am
بدون شک وردپرس بزرگترین و محبوبترین سیستم وبلاگ نویسی (یا بهتر بگوییم مدیریت محتوا) است که با اختیارات فراوانی که به کاربر می دهد هنوز بصورت رایگان ارائه میشود. کیک پیاچپی هم جزء برترین فریمورکهای PHP موجود است که سهم قابل توجهی در بازار دارد. اما آیا می توان وردپرس را بر پایه کیک پیاده سازی کرد؟!
اگر چه هسته وردپرس خوب نوشته شده است اما بنظرم پیاده سازی الگوی MVC کیک، میتواند وردپرس را برای توسعه دهندگان آن دگرگون کند.برای مثال قالب یا همان Layout وردپرس را تصور کنید، شلوغ و نامفهوم به نظر میآید(هرچند مستندات وردپرس جای هیچ سئوالی را بیپاسخ نگذاشته است). طراح مجبور است یک صفحه را به چند بخش در چندین فایل مجزا کند اما با معماری MVC همه در یک مجموعه منظم خواهند بود. مسلماً این پیاده سازی چالش های بزرگی خواهد داشت چرا که وردپرس یک سیستم ساده نیست امنیت و وسعت اختیارات فاکتورهای مهمی هستند که نباید نادیده گرفته شوند.
Tim Trice فردی است که روی این پروژه که اسم آن را CakePress گذاشته است کار میکند. کیکپرس هنوز در حال توسعه است و تمام قابلیتهای وردپرس را ندارد اما بدنه و قابلیتهای اصلی را پوشش داده است. میتوانید CakePress را از گوگل کد از اینجا دریافت کنید. برای افرادی که با معماری دیتابیس وردپرس و همچنین MVC در کیک آشنایی دارند سورس این پروژه می تواند یک منبع آموزشی عالی برای فراگیری CakePHP باشد.توضیحات بیشتر را میتوانید در وبلاگ Tim در اینجا بیابید.
May 31, 2009 at 12:32 am
بعد از یک مدت تقریبا طولانی ننوشتن در اینجا، در این پست قصد دارم به طور خلاصه درمورد آژاکسی کردن صفحهبندی پیشفرض CakePHP توسط jQuery بنویسم.
ابتدا آخرین نسخهی jQuery را دریافت و آن را به صورت زیر در layout فراخوانی کنید. دقت کنید jQuery تان ویرایش 1.3 یا به بالا باشد چون قرار است از تابع live که در این ویرایش افزوده شده است استفاده کنیم:
<?php
echo $javascript->link('jquery-1.3.2.min');
?>
پیشنهاد میکنم برای تکه کد زیر که قرار است درخواست کلیک بر روی لینک صفحات را به صورت آژاکس ایجاد کند، یک فایل js جدید بسازید یا اینکه میتوانید آن را مستقیم در layout اضافه کنید:
$('a[href*=/page:]').live('click', function(){
$('#content').load($(this).attr('href'));
return false;
});
کار تمام است با کلیک بر روی شماره صفحات محتوا به صورت آژاکس بارگذاری میشود. اما یکسری نکات ریز که شاید از قلم انداخته باشید:
کامپوننت RequestHandler را میبایستی به کنترلرتان افزوده باشید. دلیل آن روشن است چرا که باید نوع تقاضای کنترلر را، تشخیص دهد و layout را بصورت خودکار به Ajax تبدیل کند. برای درک بیشتر این موضوع پیشنهاد میکنم تغییرات بوجود آمده درپی افزودن یا حذف این کامپوننت را از طریق کنسول FireBug دنبال کنید. ادامه مطلب …
January 2, 2009 at 07:31 pm
قرار بود دسامبر سال قبل این مطلب رو بنویسم اما بنابر گرفتاری همیشگی و مشکلی که برای هاست پروژه جدید پیش اومد فرصت نشد. مدتها پیش (همان زمانهایی که سرور بلاگرولینگ مرتبا به علت پینگهای زیاد از کار میافتاد) قصد داشتم سیستمی مشابه بلاگرولینگ با استفاده از فید بنویسم اما فرصت زیادی نداشتم.
چند وقت پیش در یک پروژه کوچک با کلاس SimplePie آشنا شدم. انصافا در تجزیه عناصر درونی فید عالی عمل میکرد به خصوص اینکه مکانیزم caching مناسبی داشت. دو هفته قبل تصمیم گرفتم از این کلاس در قالب یه کامپونت برای CakePHP بمنظور ایجاد سیستمی مشابه بلاگرولینگ استفاده کنم.
خوشبختانه تا امروز با وجود کمبود وقتی که داشتم این وب اپلیکیشن کوچک رو تا یه جایی رسوندم نتیجهاش هم بلاگرول همینجاست. بعلت پهنای باند محدودم مجبور شدم فعلا پروژه را روی یک سرور رایگان ران کنم. هنوز پروژه تکمیل نشده و اگه فرصتم اجازه بده روی مولتی یوزر بودنش کار میکنم. (البته خبرهای خوشی از تیم توسعه بلاگرولینگ به گوش میرسه شاید تا اون زمان دوباره همه برگشتیم)
مهمترین دلیلم برای عدم استفاده از یه تجزیهگر فید ساده بمنظور لیست کردن وبلاگها، عدم ویرایش عناصر فیدها بود. حالا با استفاده از یه مکانیزم کش مناسب و ذخیره آخرین فید هر بلاگ در MySQL هم عناصر عنوان و توضیحات فیدها قابل ویرایش هستند و هم از لحاظ بهینهسازی بار سرور برای لیستهای طولانی کمتر میشه.
لیست بلاگرول اینجا هر 15 دقیقه رفرش میشه خروجی فید بلاگرول من هم اینجاست. اینها همه رو گفتم برای این که بگم با گسترش کاربرد فیدها تگ pubDate خیلی مهمه. خیلیها هنوز آیتمهای فیدشون این برچسپ رو نداره یا مقدارش معتبر نیست!
November 26, 2008 at 09:31 pm
از آنجایی که خیلی از دوستان در رابطه با انتخاب یک IDE مناسب برای کار با کیک با مشکل مواجه بودند. این پست نوشته شد، امیدوارم مفید واقع شود. در این پست و پست آتی تنظیمات ادیتور قدرتمند Eclipse برای کار با فریمورک CakePHP به ترتیب زیر آورده شده است:
-
+ بخش اول:
1- معرفی اجمالی Eclipse و ایجاد workspace و project
2- پیوند هسته کیک به پروژه جهت استفاده از قابلیتهای توکار Eclipse
3- پیکربندی برای شناسایی فایلهای thtml یا ctp
4- پیکربندی برای طبخ کیک بطور مستقیم با کنسول CakePHP
+ بخش دوم:
5- دسترسی به پایگاه داده MySQL به کمک پلاگاین QuantumDB
6- افزودن پشتیبانی از Subversion به کمک پلاگاین Subclipse
آنچه بدین منظور نیاز دارید:
+ نسخهای از Eclipse که شامل ابزارهای توسعهی پیاچپی است (3.3.2)
+ نسخهای از XAMPP که بطور پیشفرض در C:xampp نصب شده است
+ نسخهای از CakePHP که بطور پیشفرض در C:xampphtdocscake قرار دارد
+ سیستم عامل ویندوز ایکسپی
چرا از Eclipse استفاده میکنم؟
اول اینکه کد باز است و تعداد زیادی پلاگاین برای آن نوشته شده است که همهی نیازهای یک توسعه دهندهی وب را پوشش میدهد بطوریکه با اطمینان می توان گفت این نرمافزار به تنهایی یک توسعه دهنده را راضی خواهد کرد.
دوم اینکه بزرگ و قدتمند است اما در عین حال ساده برای بکارگیری. Eclipse یک IDE خاص نیست بلکه برای طیف وسیعی از زبانهای برنامهنویسی منتشر شده است. حتی خیلی از ادیتورهایی که جدیدا عرضه میشوند بر پایهی Eclipse بنا شدهاند. از آن جمله میتوان نرمافزار Carbide.ui Theme Edition شرکت نوکیا که برای طراحی تمهای گوشیهای موبایل ساخته شده است را نام برد یا جای دوری نرویم همین Aptana که برای کار با فریمورکهای جاوااسکریپت پیشنهاد میشود و … ادامه مطلب …
October 24, 2008 at 01:10 am
پیش نیازها: ساخت لینکدونی با CakePHP (بخش اول) و (بخش دوم)
در مراحل قبل دادهها را از دیتابیس خواندیم و در قالب لینک نمایش دادیم. در این بخش قصد داریم امکان افزودن لینک جدید، ویرایش و حذف لینک را اضافه کنیم و مختصری هم با Routes در کیک پیاچپی آشنا شویم.
ساخت فرم و افزودن لینک
طبق نمونههای گذشته به فایل links_controller.php کنش add را بصورت زیر اضافه میکنیم تا بتوانیم لینکهای جدیدی در دیتابیس اضافه کنیم:
<?php
class LinksController extends AppController {
var $name = 'Links';
function index() {
$this->set('links', $this->Link->find('all'));
}
function view($id = null) {
$this->Link->id = $id;
$this->set('link', $this->Link->read());
}
function add() {
if (!empty($this->data)) {
if ($this->Link->save($this->data)) {
$this->flash('Your link has been saved.', '/links');
}
}
}
}
?>
تابع add را به این صورت تعریف میکنیم که چنانچه فرم ارسال شده خالی نبود، با استفاده از مدل Link سعی شود داده ذخیره شود اما چنانچه بنا به دلایلی ذخیره نشد، نما نمایش داده شود. این خود فرصتی را در اختیارمان قرار میدهد تا خطاهای ناشی از محتوای فیلدهای ارسالی را نمایش دهیم. ادامه مطلب …