تجربه من در codeigniterو راه اندازی دو پروژه توسط اون بسیار لذت بخش بود از قابلیتهای این فریم ورک:
۱− همه چیز دست برنامه نویس و تغییرات در اون بسیار راحت
۲− یادگیری فوق العاده سریع
۳− دوری از تنظیمات زیاد برای استفاده از تمپلیت یا مدل
و خیلی مزایای دیگه که کار با اون رو لذت بخش میکنه.
ولی نبود command line در اون خیلی عذاب آوره در صورتی که بیشتر فریم ورکهای ابزاری برای crud,controller,model و خیلی از کارهای دیگه که ضرف چند ثانیه میشه بیشتر زحمات عمومی یک پروژه رو انجام داد.
و اما yii که در حال مطالعه بر روی اون هستم خیلی چشممو گرفته. انگار این همون ci ولی با قابلیتهای بیشتر هست.
و اما بریم سر اصل قضیه برای اضافه کردن command line در سیستم عامل لینوکس اوبونتو ابتدا به مسیر پوشه ای که yii رو در اون extra کردید برید و البته باید در پوشه framework باشید و دستور زیر رو وارد کنید تا مسیر جاری برای نشون داده بشه
pwd
که مسیر جاری من بصورت زیر هست
/home/mehrdad/host/yii/framework
آدرسی که نشون داده میشه رو کپی کنید و دستورات زیر رو با آدرس اون در ترمینال وارد کنید
export PATH=$PATH:/path/to/framework
برای چک کردن مقدار ورودی کاربری روشهای زیادی هست که سمت کاربر معمولا با html5 یا javascript و یا هر دو با هم استفاده میشه. البته در اینجا با validation سمت سرور کار نداریم
ساعتها وقت نیاز هست تا یک تابع validation رو بر روی تمام مرورگرها و سیستمها تست کنید تا از کار کرد خوب اون مطمئن بشید. در اینجا بهترین توابع validation رو که بر حسب تجربه جمع آوری کردم رو میزارم
برای number
// check 0-9 digit function is_digit(input) { return (input - 0) == input && (input + '').replace(/^\s+|\s+$/g, "").length > 0; }
// Check if string is a valid email address function valid_email(fData) { var reg = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-Z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$"); return reg.test(fData); }
تعداد حروف وارد شده در متن(زبان فارسی بدلیل encoding دو برابر نشان داده میشود)// Check if string is non-blank var isNonblank_re = /\S/; function none_blank(input) { return String(input).search(isNonblank_re) != -1 }
البته کدهای دیگری هم هستن که به مرور زمان بعد از تکمیل شدن اینجا میزارم. تمام برنامههای نوشته شده رو در یک بسته میتونید دانلود کنید.// Get String Length function regGetStrLength(input) { var valLength = input.length; var reg = new RegExp("^[\u0391-\uFFE5]$"); var result = 0; for (i = 0; i < valLength; i++) { if (reg.test(input.charAt(i))) { result += 2; } else { result++; } } return result; }
DBMS یا همان سیستم مدیریت پایگاه داده به ابزاری مجتمع برای مدیریت و نگهداری پایگاه داده معروف است. شاید معروفترین آنها MSSQL مایکروسافت باشد و oracle بالاتر از آن. ولی برنامهنویسان وب php با mysql آشنایی بیشتری دارند. پایگاه دادهای اوپن سورس و بسیار خوش دست و نرم رفتارتر از sql server مایکروسافت.(این را تنها کسانی که بصورت حرفه ای با sql server کار کرده اند می دانند) بر عکس امکانات بسیار زیاد آن ولی کاملا بر روی اعصاب می باشد.
برای mysql از DBMS معروف آن PhpMyAdminاستفاده می شود. ولی در اینجا قصد دارم تا شما را با WorkBench که ابزاری از طرف توسعه دهنده گان mysql هست آشنا کنم.
تمام برنامه نویسان php با تابع jdf آشنایی دارن. تابعی که به جرات میشه گفت هر سایتی دیدید که با php نوشته شده و تاریخ رو به جلالی نشون میده، از تابع jdf استفاده کرده. البته هسته این تابع بهره گیری از unix time هست که توی پست قبلی مختصری دربارش توضیح دادم.
codeigniter بهترین فریم ورک از نظر یادگیری و تسلط سریع هست و حتی در پروژه های کوچک و متوسط بسیار کاربردی. در این پست قصد دارم تا تابع jdf رو در codeigniter راه اندازی کنم.
این چند روز روی یه سایت خبری دارم کار میکنم(البته از رنگ بنفش). انواع اقسام گالریها روی این سایت پیاده سازی کردم. از تایکر خبری گرفته تا اسلایدر متن و عکس. بیشتر وقت من روی این سایت کار کردن با کتابخونهها و پلاگینهای jquery برای راه اندازی اسلایدر.
آخرین روزهای برنامهنویسی و اتام کار هست که دیدم میگه حتما زیر عکسهای گالری هم در حالت نمایش و هم قبل از نمایش تمام صفحه متن بزاریم. در صورتی که قبلا اصلا گالری آن چنانی نمیخواست. یه مورد بهم نشون دادو گفت همینطوری باشه و منم دیدم صرفا عکس خالی هست که با جدول نشون داده میشه.
خلاصه کار ما کشید به پلاگین گالری galleria که والا انصافا خیلی هم امکانات متنوعی داره. البته برای تهیه تمپلیتهای متنوع اون باید مبلغ پرداخت بشه. ولی توی سایتها بگردید اگر همون تم رو استفاده کرده باشه میتونید کل کتابخونه به همراه تم رو دانلود کنید. منم سایتی پیدا کردم که تمپلیت folio رو نصب و راهاندازی کرده بود. گفتم دیگه دنبال خوندن مستندات برای کانفیگ و نصبش نرم و مستقیما از کانفیگهای همین سایت استفاده کنم.
همه چیز خوب پیش رفت تا این که بر روی صفحه من وقتی اسکرول میکردم صفحه کادر سیاه نشون میداد.
اول فکر میکردم شاید پلاگینها دارن روی هم تاثیر میزارن با فایرباگ تست کردم دیدم مشکل خاصی نیست. به فکر غیرفعال کردم اسکرول ماوس بر روی همون div افتادم دیدم نشد. و خلاصه همه کار کردم. بعد از حدود ۴ ساعت بالا و پایین زدن و مقایسه فایل css اصلی گالریا با کانفیگ شده اون فهمیدم از فایل کانفیگ css همون سایت که div نمایش گالریا رو بخاطر همخونی با تمپلیت سایتش حدود 10000px- به طرف چپ برده بود و این بر روی سایت من باعث باز شدن صفحه به عرض 10000 شده که با اولین اسکرول به انتهای عرض طرف چپ میرفت.
نتیجه اخلاقی اینکه بهتره همیشه کانفیگ از روی مستندات اصلی انجام بشه که حدود 20 دقیقه هم وقت گیر نیست و بر روی همون پلاگین تسلط هم پیدا میکنید.
بارها پیش میاد که بی خبر از توابع مفید در دیتابیس یا دستورات php اقدام به نوشتن قطعه کد و یا فشار بیشتر به سرور بر اثر درگیر شدن با کدهایی که توابع اونها در داکیومنت دیتابیس یا phpهست.
در این جا قصد دارم تا چند تا از توابع مفید mysql که دونستن اونها به سرعت بیشتر برنامه کمک میکنه.
در برنامه نویسی php با تابع time زیاد سر و کار خواهید داشت مثلا برای ثبت مقاله جدید در سایت نیاز به تاریخ درج مقاله هم هست که از قطعه کد زیر برای بدیت آوردن زمان فعلی و ذخیره اون در دیتابیس استفاده میشه
<?php $time = time(); $sql = "INSERT INTO `article`(`a_title`,`a_content`,`a_time`) VALUES ('$title','$content','$time') ?>در اینجا اصل کار برای ذخیره زمان فعلی همون تابع time هست که بعد از ذخیره به کمک تابع جامع jdf به راحتی به فرمت دلخواه هجری شمسی نشون داده میشه. البته قابلیتهای زمان unix و همچنین تابع time برای زمان یونیکش بیشتر از اینها هست.
ولی با چرخیدن در مستندات mysql پی به تابع UNIX_TIMESTAMP بردم که کار با تاریخ یونیکس رو راحت کرده و نیازی به فراخوانی تابع time در هر بار ثبت مقاله جدید نیست. نمونهای از اجرای تابع UNIX_TIMESTAMP رو در زیر مشاهده میکنید.
حالا تکه کد بالا بصورت زیر در میاد
<?php $sql = "INSERT INTO `article`(`a_title`,`a_content`,`a_time`) VALUES ('$title','$content','UNIX_TIMESTAMP(now())') ?>در برنامههای بزرگ که نیاز به فراخوانی زیاد تاریخ درج داره مثل ثبت ساعات ورود و خروج کاربران استفاده کمتر از تابع php و استفاده مستقیم از توابع mysql میتونه در روند اجرای برنامه و از درگیر شدن با الگوریتمهای مختلف کم کنه. در این روش در همان لحظهای که کوئیری زده میشه ساعت هم توسط mysql بدیت میاد و در دیتابیس ذخیره میشه
بعد از نصب وب سرور و php بر روی لینوکس اوبونتو در حالت عادی نمایش خطاها در حالت خاموش است و برای روشن کردن آن ابتدا دستور زیر را در حالت super user برای باز کردن فایل php.ini و ویرایش آن وارد کنید:
sudo gedit /etc/php5/apache2/php.ini
در فایل باز شده بدنبال display_errors بگردید که باید در خط ۵۳۷ باشد. مقدار پیشفرض آن off است که آنرا برابر On کنید.
الان نزدیک دو هفته هست که فقط میخوام zend رو نصب کنم و یه نمونه برنامه با اون بنویسم ولی واقعا کلافه کننده و زننده هست. مثلا zend در ورژن ۱ بصورت فایل دانلود میشد و با استفاده از command میتونستی کنترلها رو بسازی و خودش همه چیو کنترل میکنه
ولی در ورژن ۲ ابتدا باید composer نصب کنی و بعد بصورت depends تمام فایلهای مورد نیاز پروژه رو بصورت خودکار تیکه تیکه از وب دانلود میکنه. من هر دو روش رو جلو رفتم. روش اول کلا ارور میده و فایل htaccess. بخوبی بر روی وب سرور من کانفیگ نمیشه. جالب اینجاست ۵تا فیلم آموزشی از وب گرفتم و ۵تاشون روش مخلفی رو برای نصب گفتن. تازه ۴ تا از این ویدیوها دارن روی mac نصب میکنن و فقط یکی از اونها بر روی ویندوز نصب میکنه.
روش دوم در مرحله اتصال به نت و دریافت بستهها ارور میده و اونم بخاظر استفاده از پروتکل ssl هست که خوب تو کشور ما ssl ایمیلها فقط تایید شده هست و بقیه زیر فشار شدید ه*یلترینگ هستن.
آخه منه برنامهنویس چقدر وقت دارم بشینم دو ساعت نصبش کنم و بعدش بشینم کار با اون رو یاد بگیرم. تازه مدتی بشینم ماژولها و کار با توابع اون رو یاد بگیرم. به نظرم بیخیال شدن از این zend زننده بهتر از ادامه دادنش باشه.
در واقع بی حق نیستن بیشتر برنامهنویسها میرن سراغ codeigniter یا کیکپیاچپی.
خلاصه دو هفته از وقت ما هدر رفت اونم به نتیجه.
تا بحال کتابهای زیادی دیم و همینطور خریدم برای یادگیری php ولی هیچ کدومشون دارای محتوای درست حسابی نبودن. ترجمه شده که اصلا محتوا رو برگردونده بود و تالیفی هم صرفا به عنوان این که کتابی روانه بازار بشه نوشته شده بود.
ولی باید گفت یادگیری زبان برنامه نویسی وب رو باید از آخرین منابع و ترفندها یاد گرفت. دنیای وب به سرعت تغییر می کنه و بیشتر کتابهای چاپی متعلق به چند سال پیش هستن. همچنین اون نکته ها و ترفندها در طول آموزش کمتر بهش توجه شده. همچنین حجم صفحات و یادگیری بعضی مطالب محاوره ای که دیگه جای خود داره.
در این بین کتابهای الکترونیک و رایگان هم هستن. مثلا نویسنده ای مثل احمد بادپی که واقعا کتابهای خوبی نوشته. حالا در اینجا یه کتاب خوب و کامل در مورد برنامه نویسی php معرفی میکنم که نوشته آقای شهرکی هست. ایشون برنامه نویس وب هستن و تمام نکات و ترفندها رو همراه با مثال آموزش دادن. کتاب ۱۲ فصل در ۱۴۷ صفحه هست. خلاصه بیشتر مباحث رو آموزش داده. از فصل ۸ کتاب شروع میکنه به نوشتن یه cms و در فصل ۹ اون رو تکمیل میکنه. حتی به مبحث شی گرایی هم به توجه شده.
این کتاب به صورت مستقیم از سایت آموزش برنامه نویسی ncis.ir قابل دانلود هست که در لینک زیر هم میتونید مستقیما دانلودش کنید.
دریافت
حجم: 6.2 مگابایت
همچنین کتاب آقای سید محمدرضا حسینیان راوندی هم بسیاری از مطالب پیشرفته مثل curl و pdo رو در برمیگره.
دریافت
حجم: 2.31 مگابایت