نحوه پیدا کردن Path و Url اسکریپت
برای ساختن کدهای انعطاف پذیر، باید مسیر فایلها رو داینامیک تعیین کنیم که همه جا کار کنه.
چند خط کد زیر اطلاعات خوبی از موقعیت فایل رو میدهند ولی تضمینی بر اینکه همه جا کار کنند نیست! در حالت کلی تقریبا همه جا صحیح کار می کنه.
$baseurl = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']).'/';
$basepath = str_replace('\\','/',dirname(__FILE__)).'/';
define('BASE_RELATIVE_URL',dirname($_SERVER['SCRIPT_NAME']).'/');
define('BASE_URL', $baseurl);
define('BASE_PATH', $basepath);
echo 'Base Relative Url: ' . BASE_RELATIVE_URL;
echo 'Base Url: ' . BASE_URL;
echo 'Base Path: ' . BASE_PATH;
برای نمونه، این کد رو در فایلی در Localhost با آدرس زیر قرار میدیم:
F:/Wamp/www/parent/child/test.php
همونجور که واضحه، URL این فایل به این شکل خواهد بود:
http://localhost/parent/child/test.php
در این حالت، خروجی کد بالا به این شکل خواهد بود:
/*
Base Relative Url: /parent/child/
Base Url: http://localhost/parent/child/
Base Path: F:/Wamp/www/parent/child/
*/
!-->
برچسب ها: solution
چند معیار ساده برای اطمینان از قوی و حرفه ای بودن Application
از اونجایی که برنامه نویسی انتها نداره و هیچکس درش کامل نیست، وقتی برنامه ای میسازیم واسمون سوال پیش میاد که آیا این Application به روش خوبی نوشته شده؟ آیا مشکل ساختاری نداره؟
نکنه روش من با روش استاندارد و معیار کاملا متفاوت باشه یا براحتی هک بشه!
برای اینکه بفهمیم یک Application خوبه یا نه، چند تا شرط رو باید داشته باشه:
اول. خوب و کامل مطابق نظر ما کار کنه.
باید اونجوری که واسش برنامه ریزی کردیم کار کنه نه با تخفیف! یعنی اگر ظاهر جایی خوب نیست یا لینکی غلطه یا بخشی کار نمی کنه، پس سیستم ما هنوز خوب و کامل نیست.
اصولا باگ اجتناب ناپذیره ولی کار نکردن یک بخش اساسی، قابل گذشت نیست. وجود باگها رو باید به بخشهای غیراساسی و کوچک محدود کرد.
دوم. مشکل ساختاری اساسی و معضل امنیتی نداشته باشه.
باید همیشه به روز باشیم یا با شیوه های نوین آشنا باشیم (در حد توان) ولی در حالت کلی باید ساختار رو کامل تحلیل کنیم و اشکالاتش رو کشف کنیم.
مثلا یک سیستم مدیریت کاربر نوشتیم که کاربر میتونه هر کاراکتری رو به عنوان نام کاربری انتخاب کنه. وقتی چنین قابلیتی رو داریم تعریف می کنیم باید فکر این رو هم بکنیم یه نفر چنین Usernameای رو انتخاب کنه: " " یعنی 10 تا Space و این ناجوره! باید چنین مواردی رو کشف کنیم و راه کشفش هم تحلیل سیستمه.
سوم. توسط نویسنده اش قابل فهم و توسعه باشه.
کدی که خود من (نویسنده اش) امروز یا چند وقت دیگه ازش سر در نمیارم، به درد سطل آشغال میخوره! یا اگه ازش سر دربیارم ولی نتونم توسعه اش بدم هم همون وضعیت رو داره.
چهارم. برای برنامه نویسهای دیگه هم قابل فهم و توسعه باشه.
فهم کدها برای خود من کافی نیست کدها باید برای بقیه هم قابل فهم و توسعه باشه. شاید من ذهن مغشوشی داشته باشم و فقط خودم از کار خودم سر دربیارم.
باید امکان این باشه که با یک توضیح و آموزش مختصر، فهم سیستم خودم رو به شخص دیگه ای منتقل کنم. اگر امکان چنین کاری نباشه یا خیلی سخت باشه، سیستم ما زباله است!
باید به یک نکته ظریف در این باره اشاره کرد که وقتی سیستمم رو برای کسی توضیح میدم و متوجه نمیشه، معنیش همیشه خنگی اون شخص نیست معنیش میتونه مبهم بودن موضوع، سخت بودن مبحث، بد توضیح دادن من یا خنگی من هم باشه!
- پنجم. دمده و عهد بوقی نباشه ، بروز باشه.
هر ساختاری یک عمر داره وقتی عمرش بگذره دیگه جوابگو نیست و باعث میشه شرایط بالا نقض بشه.
!-->
برچسب ها: solution
بیرون کشیدن لیست Enum و Set از دیتابیس
یکی از روشهای ذخیره اطلاعات در MySQL استفاده از لیست از قبل تعیین شده است که کنترل کنیم فقط کلمات خاصی قابل ذخیره و بازیابی باشند. مثلا جدول زیر:
CREATE TABLE boplo_categories (
`id` INT(10) AUTO_INCREMENT PRIMARY_KEY,
`categories` ENUM('PHP', 'Web Design', 'MODx', 'IT', 'Scratch'),
`tags` SET('Solution', 'API', 'AJAX', 'CSS', 'Javascript')
)
در این جدول، ستون categories که از نوع ENUM تعیین شده، حتما با یکی از مقادیر مشخص شده می تونه پر بشه.
و ستون tags که از نوع SET ایجاد شده مانند ENUM عمل می کنه با این تفاوت که در این ستون میشه بیشتر از یکی از موارد لیست رو ثبت کرد مثلا هم CSS و هم Solution ولی ENUM فقط یک مقدار میتونه داشته باشه.
کار با ENUM و SET خیلی لذتبخشه غیر از موقعی که بخوایم لیستی که در ENUM یا SET مشخص شده رو در برنامه امون داشته باشیم. معمولترین کاردبردش ساختن <SELECT> براساس مقادیر مشخص شده است. برای اینکار باید ابتدا لیست مقادیری که بصورت ENUM یا SET مشخص شده رو توسط یک کوئری بدست بیاریم و سپس کلمات لیست رو از این مقدار خارج کنیم. در ادامه پست میخوایم لیست کلمات مشخص شده برای ستون categories که بالا قرار دادم رو بدست بیاریم.
برچسب ها: function,mysql,solution
ارسال ایمیلهای فارسی و خوانا
میخوایم بدون درد و خونریزی، ایمیل فارسی بصورت راست به چپ بفرستیم...
Gmail:
جی-میل امکانی داره تا دکمه های Right to Left و Left to Right رو به Editor اش اضافه کنیم.ابتدا به بخش Setting میریم. در اونجا در بخش General (همون اولی)، به قسمت اول یعنی Language مراجعه می کنیم و روی دکمه Show all language options کلیک می کنیم (مرحله یک در تصویر). همون لحظه عباراتی به این قسمت اضافه میشه. کافیه گزینه Right-to-left editing support on رو انتخاب کنیم(مرحله دو در تصویر) و تغییرات رو ذخیره کنیم. حالا موقع نگارش یک ایمیل، دو دکمه جدید به Toolbar ادیتور اضافه شده(مرحله سه در تصویر).
روش دوم، راست به چپ کردن از طریق کیبورد هست. در کیبورد من این کار با دکمه های Shift+Ctrl سمت راست انجام میشه (و با Shift+Ctrl سمت چپ کیبورد، چپ به راست میشه). یعنی وقتی روی بخش قابل تایپ ایمیل کلیک کنیم و این دکمه ها رو بزنیم، Cursor به سمت راست میاد و میتونیم راست به چپ بنویسیم. جیمیل این حالت رو حفظ می کنه و وقتی ایمیل رو فرستادیم، گیرنده هم همونجور مشاهده خواهد کرد. این اتفاق بخاطر هوشمندی ادیتور جیمیل هست.
Yahoo Mail:
یاهو مثل گوگل فهمیده نیست و چنین قابلیتی رو پیش بینی نکرده ولی با روش دومی که برای جیمیل معرفی کردم، میشه در یاهو هم راست به چپ ایمیل نوشت. یعنی تغییر جهت نگارش با دکمه های Shift+Ctrl سمت راست و سمت چپ کیبورد.
Live Mail:
لایو دیگه ته بی شعوره! هیچ راه درست و درمونی نداره به غیر از اینکه این سرویس امکان نگارش ایمیل بصورت HTML رو فراهم می کنه (که قابلیت منحصر به فرد و جالبیه) که اگر HTML بلد باشیم، می تونیم ایمیل RTL با لایو بنویسیم و ارسال کنیم.
اگر هیچی از HTML نمی دونی و لنگ فرستادن ایمیل راستچین با لایو هستی. تا همین حد میشه کمک کرد:
وقتی ایمیل رو براساس تصویر HTML کردی. ایمیل رو با این کد شروع کن:
<div dir="rtl" style="font-family:Tahoma">
و با این تموم کن:
</div>
و برای ایجاد خط جدید، بجای Enter تگ زیر رو قرار بده:
<br />
نمونه:
<div dir="rtl" style="font-family:Tahoma">
سلام<br />من یک ایمیل راستچین در لایو هستم.
</div>
پی نوشت:
کیبورد مکینتاش، اونجوری که تست کردم با دکمه های Command+Shif+} راستچین میشه.
برچسب ها: rtl,solution
صاف و صوف پست بدیم و کج و کوله نبینیم
توی انجمن مادایکس نوشتن پستهای فارسی کلی دردسر داره. باید از تگ [right] استفاده کنیم و چون ادیتور RTL نیست باید کلمات غیرفارسی رو خط جدید قرار بدیم و خلاصه یه کثافتکاری ای میشه که نیا و نبین!
دیروز خیلی اتفاقی (در واقع شانسی)، تگ [rtl] رو توی فروم تست کردم و خشوبختانه کار کرد و عبارات داخلش رو بصورت RTL نمایش داد. اینجا بود که با خودم گفتم ای کاش این همه مدت بجای پستهای فضایی، یه سری به سایت
SMF زده بودم این قابلیت رو اونجا دیده بودم!
نکته دوم اینکه برای نوشتن پستهای فارسی قابل خواندن، این تگ کافی نیست و باید جهت کل متن رو توسط تگ [right] به سمت راست ببریم و برای تکمیل کار هم، فونت نوشته ها رو توسط تگ [font] به شکل [font=Tahoma] به Tahoma تغییر بدیم.
در نهایت باید این سه تگ رو با هم استفاده کنیم:
[rtl][right][font=Tahoma]
من یک پست خیلی خوب و گوگولی تشریف دارم که راست چین و باحال هستم
[/font][/right][/rtl]
یک نکته اینکه تگ [code] این تگها رو قطع می کنه یعنی وقتی میخوایم از تگ [code] استفاده کنیم باید تگهای مربوط به راستچین رو قبل از تگ [code] ببندیم و بعد از تگ [code] مجددا باز کنیم. شبیه این:
[rtl][right][font=Tahoma]
من یک پست خیلی خوب و گوگولی تشریف دارم که راست چین و باحال هستم
[/font][/right][/rtl]
[code]It's a code![/code]
[rtl][right][font=Tahoma]
من ادامه همون پست بالایی هستم و از اون کلی باحالترم
[/font][/right][/rtl]
یک نکته ریزه میزه: توی هر فیلدی، اگر در محیط ویندوز و درصورت نصب بودن زبان فارسی، کلیدهای Shift+Ctrl سمت راست کیبورد رو بزنیم، اون فیلد راست چین میشه و بای زدن همین دکمه در سمت چپ کیبورد به چپ به راست تغییر می کنه.
برای ما که فارسی مینویسیم راحتتره که این کار رو بکنیم تا توی نوشته های فارسی-انگلیسی خوانایی بهتری داشته باشیم. این نکته برای ادیتور انجمن مادایکس هم صدق می کنه.
پی نوشت: من این ترفند رو در انجمن مادایکس و تاپیک زیر هم قرار دادم:
روش نگارش پستها در انجمن بصورت راست به چپ
باشد که وب تمیزتری داشته باشیــــــــــــــم!
برچسب ها: rtl,solution
تابع JavaScript برای کنترل لینکهای External
یکی از تمایلات وبلاگنویسها اینه که لینکهای خارجی، در یک تب یا پنجره جدید باز بشه. شاید این تمایل برای تو هم مثل من یکم دیر بوجود اومده باشه و پیدا کردن و اصلاح لینکها ممکن نباشه.
خوب علم پیشرفت کرده. من این کد کوچیک رو واسه همین وبلاگ نوشتم. شاید به درد تو هم بخوره:
var hostname = window.location.hostname;
var anchors = document.getElementsByTagName("a");
for(var i=0; i<anchors.length; i++) {
if( anchors[i].href
&& anchors[i].href.indexOf(hostname) == -1
&& !anchors[i].target
) {
anchors[i].target = "_blank";
}
}
از اونجایی که کار نصفه و نیمه جواب نمیده و چون این وبلاگ بخش MooTools و jQuery هم داره. این کد رو با این دو فریم ورک هم می نویسم محض نمونه و مثال از این فریم ورکها:
انتخابگر هر دوشون مثل هم هست و به شکل زیره:
var hostname = window.location.hostname;
var selector = 'a[href]:not([href*='+hostname+']):not([target]';
-
MooTools:
$$(selector).set('target', '_blank');
-
jQuery:
$(selector).attr('target', '_blank');
من اینجا یکم محدودیت عرضی دارم که طول خطوط کدها طولانی نشه وگرنه این کدها رو میشه تو یک خط اجرا کرد بجای اینکه هر تیکه اش رو تو یه متغیر بریزیم.
برچسب ها: javascript,solution
کنترل و بدست گیری مقادیر زمان بین زبانهای برنامه نویسی
یکی از روشهای خیلی خوب بدست گیری زمان در برنامه نویسی، استفاده از زمان به شکل Timestamp تعریف شده در Unix است.
Timestamp ثانیه های طی شده از 00:00 1970/01/01 تا الانه. همونجوری که واضحه، زمان به این شکل، یک عدد صحیح خواهد بود و مهمترین خاصیتش سهولت نگهداری و مقایسه است.
زمان در PHP بر پایه Timestamp تعریف شده ولی در MySQL و JavaScript چنین نیست و معمولا برای هماهنگی این سه زبان، مجبوریم کدهای اضافی داشته باشیم درحالیکه هر سه این زبانها، امکاناتی برای کار با Timestamp بر پایه Unix دارند.
در زیر یک مثال در هر کدوم از این زبانها قرار گرفته:
-
PHP:
$timestamp = time();
$date = date('Y F d', $timestamp);
-
MySQL:
timestamp = UNIX_TIMESTAMP()
date = FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x')
-
JavaScript:
var timestamp = parseInt(new Date().getTime()/1000);
var date = new Date(new Date().getTime()).getDay();
برچسب ها: javascript,mysql,php,solution
طراحی Tableless چیست؟
شاید توی طراحی قالب، به عبارت Tableless (به معنای "بدون جدول") برخورده باشی یا شنیده باشی که میگن توی طراحی از از جدول کمتر استفاده کنیم.
میخوام توضیح بدم که چرا نباید زیاد از جدول استفاده کنیم یا چرا طراحهای قالب به Tableless بودن قالبهاشون می نازند.
اول از محاسن Table میگم، بعد از معایبش و مقایسه اش با مدل CSS و در آخر یک جدول رو یکبار با تگ TABLE و یکبار توسط CSS خواهی دید. باید و نبایدهای HTMLTABLE
برچسب ها: css,solution
توابع Delegation در فریم ورکهای MooTools و jQuery
همونطور که مستحضریم، جاوااسکریپت امکان تعیین Event رو به هر Element از صفحه میده که مثلا اگر فلان Element کلیک شد این اتفاقا بیافته و اگر یکی دیگه mouseover شد اون یکی اتفاقا بیفته و غیره.
تعیین این Eventها از طریق Frameworkها مثل MooTools و jQuery عجیب آدم رو یاد هلو میندازه. مخصوصا که امکان تعریف Evnet های اختصاصی رو هم میدن مثل OnLoveBoplo، OnVisitBoplo و غیره.
این فریم ورکها، امکانی برای اجرای کد در زمان تکمیل DOM رو دارند که در MooTools رویداد domReady و در jQuery متد ()ready. که به ما امکان قرار دادن کدها رو در <head> صفحه میدن و خیلی کاربرد دارند.
مثل کدهای زیر که وقتی هر لینکی کلیک شد، یه alert ناقابل نمایش میده:
// MooTools
window.addEvent('domready', function(){
$$('a').addEvent('click', function() {
alert("You've clicked " + this.href + "!");
});
});
// jQuery
$(document).ready(function(){
$('a').click(function() {
alert("You've clicked " + $(this).attr('href') + "!");
});
});
همونطور که گفتم این کد در زمان تکمیل DOM یکبار انجام میشه و Eventها رو تنظیم می کنه. همه چی آرومه و من خیلی خوشحالم تا اینکه یه جایی یک لینک توسط جاوااسکریپت ساخته میشه یا توسط Ajax به صفحه اضافه میشه و کاملا منطقی خواهد بود که چون موقع اجرای کدهای بالا اون لینک وجود نداشته، Eventاش هم Set نشده و کدهاش هم اجرا نخواهد شد. برای حل این مشکل سه راه وجود داره ....
برای اینکه بفهمی Delegation چیه، چرا خوبه و چطور عمل می کنه، ادامه مطلب رو بخون....
برچسب ها: javascript,jquery,mootools,solution
شیوه نامتعارفی برای نمایش زمان
یه روش نمایش زمان، مدل چند وقت پیشه که مثلا بجای فلان زمان بنویسیم: 23 روز و 19 ساعت و 45 دقیقه پیش.
تابع زیر همین کار رو می کنه. تاریخ Timestamp میگیره و مدل "چند وقت پیش" تحویل میده. میشه توسط پارامترهاش تعیین کنیم که از سال تا ثانیه چه واحدهایی رو نمایش بده. یعنی مثلا سال و ماه و روز رو فقط نشون بده یا مثلا دقیقه و ثانیه رو نمایش نده و ....
نمونه:
$time = time() - 15*60;
echo getPastTime($time);
خروجی این خواهد بود:
15 دقیقه پیش
/**
* getPastTime : Get Past Time in String
*
*
* Author : AHHP(Amir Hossein Hodjaty Pour) ~ Boplo@Boplo.ir
* License : GPL
* Version : 1
* Created on : 1388/11/20 11:55 pm
*
* @param integer $time Unix Timestamp to parse
* @param bool $year Set to FALSE to remove Year from output. optional default to TRUE.
* @param bool $month Set to FALSE to remove Month from output. optional default to TRUE.
* @param bool $day Set to FALSE to remove Day from output. optional default to TRUE.
* @param bool $hour Set to FALSE to remove Hour from output. optional default to TRUE.
* @param bool $minute Set to FALSE to remove Minute from output. optional default to TRUE.
* @param bool $second Set to TRUE to remove Second from output. optional default to FALSE.
* @return string Formatted string
*/
function getPastTime($time, $year=true, $month=true, $day=true, $hour=true, $minute=true, $second=false) { }
برچسب ها: date,function,solution
< قبلیبعدی >