July 20, 2011 at 10:45 am
بدون شک وردپرس بزرگترین و محبوبترین سیستم وبلاگ نویسی (یا بهتر بگوییم مدیریت محتوا) است که با اختیارات فراوانی که به کاربر می دهد هنوز بصورت رایگان ارائه میشود. کیک پیاچپی هم جزء برترین فریمورکهای PHP موجود است که سهم قابل توجهی در بازار دارد. اما آیا می توان وردپرس را بر پایه کیک پیاده سازی کرد؟!
اگر چه هسته وردپرس خوب نوشته شده است اما بنظرم پیاده سازی الگوی MVC کیک، میتواند وردپرس را برای توسعه دهندگان آن دگرگون کند.برای مثال قالب یا همان Layout وردپرس را تصور کنید، شلوغ و نامفهوم به نظر میآید(هرچند مستندات وردپرس جای هیچ سئوالی را بیپاسخ نگذاشته است). طراح مجبور است یک صفحه را به چند بخش در چندین فایل مجزا کند اما با معماری MVC همه در یک مجموعه منظم خواهند بود. مسلماً این پیاده سازی چالش های بزرگی خواهد داشت چرا که وردپرس یک سیستم ساده نیست امنیت و وسعت اختیارات فاکتورهای مهمی هستند که نباید نادیده گرفته شوند.
Tim Trice فردی است که روی این پروژه که اسم آن را CakePress گذاشته است کار میکند. کیکپرس هنوز در حال توسعه است و تمام قابلیتهای وردپرس را ندارد اما بدنه و قابلیتهای اصلی را پوشش داده است. میتوانید CakePress را از گوگل کد از اینجا دریافت کنید. برای افرادی که با معماری دیتابیس وردپرس و همچنین MVC در کیک آشنایی دارند سورس این پروژه می تواند یک منبع آموزشی عالی برای فراگیری CakePHP باشد.توضیحات بیشتر را میتوانید در وبلاگ Tim در اینجا بیابید.
July 10, 2011 at 09:22 am
در بخشی از آخرین پروژه ایی که این روزها در حال نوشتن آن هستم لازم بود قابلیت Mail Merge مایکروسافت ورد، تحت وب پیاده سازی شود. بعبارتی کاربر یک الگو در قالب فرمت doc یا docx ایجاد می نمود و بعد از آنالیز الگو، داده های متناظر از یک فایل با فرمت اکسل در بلوک ها قرار می گرفت و فایل نهایی آماده سازی می شد. به واسطه فیلتر سازی داده های فایل اکسل و استفاده بهینه از کد راهی مناسب تر از ایمپورت داده ها از قالب Excel به Mysql پیدا نکردم. اصولاً بکارگیری نرم افزارهای آفیس مایکروسافت در محیط وب با PHP، بخصوص ویرایش فایل های ساخته شده با این مجموعه کار ساده ایی نیست. هرچند استفاده از COM در این موارد چاره ساز است اما محدودیت به سیستم عامل ویندوز را به همراه خواهد داشت.
ساده ترین راه برای انتقال داده ها، ذخیره فایل اکسل با فرمت های xls یا xlsx در قالب فرمت csv توسط مایکروسافت اکسل و ایمپورت آن به Mysql بود. این فرمت خلاصه شده عبارت comma-separated values ( مقادیر جدا شده با کاما) می باشد که داده ها را بصورت جدولی در یک فایل متنی که می توان آن را با یک وبرایش گر متن باز کرد ذخیره می کند. در حقیقت شماره خطها به ردیف های جدول و داده های جدا شده با کاما به فیلدها اشاره دارند. اما تبدیل به csv توسط اکسل UTF-8 را به خوبی پشتیبانی نمی کند و داده های فارسی در تبدیل قابل استفاده نیستند و اینکه می بایست کاربر عملیات تبدیل را خودش انجام می داد و فایل csv را برای ایمپورت وارد می کرد در حالی که استفاده از فایل اکسل با فرمت معمولی xls یا xlsx ارجحیت داشت.
خوشبختانه کلاس PHPExcel به اندازه ایی خوب و کامل نوشته شده بود که دغدغه نوشتن کلاس جدید را نداشتم. این کلاس که بر پایه استانداردهای OpenXML مایکروسافت نوشته شده است قابلیت نوشتن و خواندن از فایل Excel را براحتی فراهم می کند. برای وارد کردن اطلاعات از فایل Excel به Mysql تکه کد زیر را نوشتم: ادامه مطلب …
March 11, 2009 at 10:34 pm
در این پست با یک مثال کاربردی به معرفی کامپوننت Authentication در فریمورک قدرتمند CakePHP خواهیم پرداخت. بصورت ساده یک مدل تصدیق هویت کاربر ایجاد میکنیم که برای ورود به بخش مدیریت، کاربر میباید وارد سیستم شود. در پست بعدی در مورد تصدیق هویت در کیک، با اضافه کردن دو کامپوننت ACL و Cookie سیستم پایدارتری ایجاد خواهیم کرد.
در این آموزش فرض شده است اصول کار با کیک را فراگرفتهاید. میتوانید کیک را نصب کنید، تنظیمات اولیه را مقداردهی کنید و Cake Bake (پختن کیک) را با کنسول انجام دهید و … اگر آماده نیستید به سری آموزشهای قبل (ساخت لینکدونی با CakePHP) رجوع کنید و بعدا برگردید. ضمنا از آخرین نسخه پایدار CakePHP و PHP 5 استفاده میکنیم.
خوشبختانه نصب و بکارگیری کامپوننت توکار auth سادهترین شکل ممکن برای داشتن یک سیستم ورود کاربر است. مانند همه کامپوننتها، با افزودن ‘Auth’ به پارامتر $components کامپوننت به کنترلر شما افزوده میشود. چون قصد داریم از این کامپوننت در دیگر کنترلرها نیز استفاده کنیم برای جلوگیری از تکرار، آن را به AppController اضافه میکنیم. بنابراین فایلی بنام app_controller.php در شاخه اصلی app تان با محتوای زیر ایجاد کنید:
class AppController extends Controller {
var $components = array('Auth');
}
روشن است که چون دیگر کنترلرها فرزند AppController هستند خصوصیات آن را به ارث خواهند برد. بگذارید کمی در مورد قوانین توکار این کامپوننت بگویم. بطور پیشفرض این کامپوننت انتظار دارد شما جدولی بنام users با فیلدهایی بنام username و password داشته باشید. اما در برخی موارد خاص، پایگاه داده بدلایل امنیتی اجازه نمیدهد که برای یک فیلد نام password را انتخاب کنید. مشکلی نیست ما این عرف را برهم میزنیم و از نام دلخواه خودمان استفاده میکنیم. ابتدا یک جدول بصورت زیر بسازید: ادامه مطلب …
March 5, 2009 at 09:49 am
از آنجایی که قصد داشتم در مورد کامپوننتهای ACL و Authentication در کیک پیاچپی بنویسم (و خیلیها کار با ACL در کیک را از مباحث دشوار میدانند)، بهتر دیدم برای فهم بیشتر پستهای آینده، ابتدا مختصری بصورت تئوری در مورد یک مدل تصدیق هویت کاربر توضیح دهم و سپس با مثالهای عملی شروع کنم.
سیستمهای تصدیق هویت کاربر بخش رایج بسیاری از برنامههای کاربردی تحت وب هستند. در CakePHP چندین سیستم بدین منظور وجود دارد که هر یک اختیارات متفاوتی ایجاد میکند. سادهترین آن استفاده از کامپوننت authentication است که در صورت تصدیق کاربر، مجوز ورود به تمام بخشهای برنامه میدهد.
این کامپوننت می تواند با کامپوننت دیگری بنام Access Control Lists برای ساخت مدلهای پیچیدهتری که سطوح مختلفی از دسترسی را تعیین میکند، ترکیب شود. برای مثال به یک کاربر مجوز دسترسی به بخشهای عمومی، به دیگری اجازه ویرایش مطالب و به کاربری دیگر مجوز مدیر سیستم را بدهد.
کار با کامپوننت authentication بطور باورنکردنی ساده و سریع است اما کاربرد کامپوننت ACL شاید برای بار اولی که از ان استفاده میکنید کمی مشکلتر باشد اما با یادگیری کاربرد آن به یکی از جالبترین و پرقدرت ترین کامپوننتهای توکار کیک تبدیل خواهد شد. برای شروع یک سناریو ساده به شکل زیر را که در عمل صورت میگیرد تصور کنید:
1- تلاش برای مشاهده آدرس. در ابتدا فرض کنید کاربری بنام محسن سعی میکند محتویات صفحهایی به آدرس http://alvanweb.com/article/edit را مشاهده کند.
2- تجزیه آدرس. هنگامی که درخواست کاربر از طریق مرورگر ارسال میشود، کامپوننت authentication تشخیص میدهد که آدرس درخواستی با کنترلری بنام article و کنشی بنام edit (که خود با کنشی از نوع update رابطه دارد) در ارتباط است.
3- آیا صفحه محدود شده است؟ همچنین این کامپوننت تشخیص میدهد که دسترسی به این کنش در کنترلر article محدود شده است. بنابراین بررسی میکند که آیا کاربر وارد سیستم شده است یا خیر. ادامه مطلب …
February 28, 2009 at 01:02 am
هرچند این روزها فرصتی نیست که مانند گذشته کتاب بخوانم اما در عوض فرصت مناسبی است تا کتابهایی که در گذشته خواندهام را معرفی کنم و از کمبود سوژه مناسب برای نوشتن در این وبلاگ بکاهم. در این پست و پستهای آتی بدنبال لینک دانلود کتاب نباشید. تنها آنچه میخوانید برداشت شخصی من از کتابها است.

کتابی که برای این پست در نظر گرفتهام کتاب
برنامهنویسی پیشرفته در پیاچپی نوشته
جورج شلاسنیگل است (مشخصات دقیق لاتین و ترجمه کتاب در انتهای پست آمده است). اولین چاپ کتاب فوریه سال 2004 بوده و در اسفندماه 1385 توسط مهندس محسن مسگر هروی تحت نام برنامهنویسی پیشرفته در PHP 5 به زبان فارسی ترجمه شده است.
برنامهنویسانی که با PHP مقدماتی آشنایی داشته و مباحث اولیه وب را بشناسند میتوانند با مطالعه این کتاب اطلاعات مفیدی را در زمینههایی مانند سبکهای برنامهنویسی، شیگرایی، بالا بردن کارایی و سرعت و افزایش امنیت به دست آورند. به کسانی که در PHP مبتدی هستند توصیه میشود پیش از خواندن کتاب به کتب مقدماتی در این زمینه مراجعه کنند.
برخلاف عنوان فارسی و همچنین توضیح روی جلد لاتین، محتوا کاملا منطبق با PHP 5 نیست و هیچ چیز به طور خاص محدود به PHP 5 نمیشود! کتاب بیشتر روی ایدهها و استراتژیها (بخصوص در قسمت بهبود کد به منظور افزایش سرعت، دقت و طراحی) تمرکز کرده است و صرفا یک آموزش گام به گام نیست و از این جنبه در کتابهای نوع خود عالیست. ادامه مطلب …