یک وبلاگ دیگر از یک برنامه نویس دیگر
نوشتههایی با برچسب HTML
تگها در HTML
مهر ۳۰م
بارها شده که سعی کردم توصیه کنم به استاندارد سازی صفحات HTML . مساله اصلی استفاده تگهای درسته. اصولا چرا میگن یه تگ رو بهتره استفاده نکنید، به جاش از یه سری تگ دیگه استفاده کنید.
برگردیم به هدف HTML. اوایل هدف از HTML بیشتر نمایش اطلاعات بود و شکل دهی به اونها. به همین دلیل خیلی از تگها به وجود اومدن که عملا برای شکل دهی استفاده میشدن. مثلا تگهای مثل تگ font یا تگ u (برای زیر خط ) یا تگ b (برای حالت بولد) و الی آخر…
اما بعدها با ظهور CSS هدف HTML یه کم تغییر کرد. دیگه مساله نمایش اطلاعات نبود. بیشتر مساله فراهم سازی بستر مناسب برای ارایه اطلاعات بود. نمایش مناسب اطلاعات کلا رفت توی وظایف CSS.
با یه مثال شاید بهتر بشه توضیح داد. مثلا همین تگ b . این تگ از لحاظ معنا، مفهوم بولد بودنه. مخفف همین کلمه bold هم هست. یعنی شما وقتی میخواید یه متن بولد شه از این تگ استفاده میکنید. ولی چرا ما میخوایم یه متن بولد بشه؟؟
احتمالا منظور ما، متمایز کردن متنه، و این وقتی اتفاق میفته که بخوایم (معمولا) یه قسمت از نوشته رو مهم جلوه بدیم.
خوب مشکلات از همینجا شروع میشه. چه دلیلی داره که همه افراد، متن مهم رو بولد نشون بدن؟ شاید من دوست داشته باشم متن مهم من ایتالیک باشه با رنگ پسزمینه زرد.
نظر هر کس این وسط میتونه متفاوت باشه. خوب CSS به دادمون میرسه. ما میتونم تگ b رو کلا دوباره تعریف کنیم :
b {
font-weight : normal;
font-style : italic;
background-color : yellow;
}
اصلا کار سختی نیست. ولی یه جای کار میلنگه و اون منطق قضیست. وقتی ما میگیم b انتظار بولد بودن رو داریم، اگه بولد نباشه منطقی نیست! از یه طرف هم من دوست دارم متن مهمم بولد نباشه. اینجاست که html میاد و تگهای منطقی رو معرفی میکنه. در این مثال به خصوص تگ strong رو.
حالا با استفاده از تگ strong برای نمایش متنهای مهم، نه مفهوم بولد بودن زیر سوال میره، و هم اینکه مفهوم مورد نظر شما مشکل پیدا نمیکنه.
خوب، اگه بیشتر دقت کنید تمام تگهایی که حذف شدن و توصیه میشه ازشون استفاده نکنید تگهایی از این دست هستن. مثلا تگ center دیگه مفهومی نداره، چون اصولا وسط بودن یه متن مفهومی نداره!(متن رو معمولا برای قشنگتر شدن وسط قرار میدن و منظور خاصی برای تمایز متن ندارن.) تگ u حذف شده، چون زیر خط داشتن متن به خودی خود بی اهمیته. (یعنی چی؟ مثلا میخواید متن مهم رو زیر خط دار کنید؟ خوب اگه مهمه از strong یا em استفاده کنید و با CSS نه تنها زیر خط دار اصلا هر بلایی که دوست دارید سرشون بیارید. یا اینکه میخواید اسامی خاص رو مشخص کنید؟ cite هست و …) و از طرفی زیر خط به راحتی توی CSS قابل ایجاده.
به جای استفاده از تگ i استفاده از تگهای em (یعنی یه متن مهم با درجه اهمیت کمتر از strong ) یا cite (یه اسم خاص) توصیه میشه. برای حذف یا افزودن متن از del و ins استفاده کنید و …
اینطوری صفحه شما به یه بانک اطلاعاتی تبدیل میشه که اصلا اطلاعاتی برای طرز نمایش رو به استفاده کننده تحمیل نمیکنه و این هدف نهاییه. حالا استفاده کننده میتونه اگه دلش خواست با کمک CSS صفحه رو به اون صورتی دربیاره که شما میخواید(یا شاید خود اون شخص میخواد ) . و اگر هم یه رباته، به راحتی صفحه شما رو بررسی کنه و بتونه منظور شما رو از اطلاعات ارایه شده، بفهمه و در اختیار کاربران خودش بگذاره….
– خیلی بیشتر از اینها میشه در این باره بحث کرد، من فقط شروعش میکنم. باقیش با دیگران :) خصوصا که شدیدا خوابم میاد!
چک باکس در html
مرداد ۲۰م
فرمهای HTML ساختار ساده ای دارند. تشکیل شده اند از یه سری المان ساده (معمولا input ) که وقتی کاربر دکمه ارسال (یه عنصر input با نوع submit ) رو میزنه فرستاده میشن به سمت سرور، و البته این که به کجا فرستاده بشه یا اینکه چطور فرستاده بشه توی خصایص فرم مشخص میشه. (خصیصه action برای اینکه فرم به کجا فرستاده بشه و خصیصه method برای اینکه مشخص کنید فرم چطور باید ارسال بشه)
این وسط، وقتی فرم ارسال میشه، کلیه عناصری که اسم دارن (یعنی همه المانهای فرمی که خصیصه name براشون تنظیم شده ) به سمت سرور ارسال میشن، ولی این وسط یه استثنا هست، و اون هم عنصر checkbox.
این عنصر اگه تیک زده بشه مقدار خودشو میفرسته و اگه تیک زده نشه مقدارش فرستاده نمیشه. معمولا مشکلی پیش نمیاد، طرف سرور کافیه بررسی کنید که آیا این اسم تو آرایه _POST یا _GET (بسته به متدی که فرم ارسال میشه) هست یا نه. اگه بود، مقدارش هر چی باشه یعنی چک خورده، اگه نبود یعنی چک نخورده.
ولی اگه نخواید از این روش استفاده کنید چی؟ یعنی اگه بخواید مثلا وقتی چک نخورد، مقداری فرستاده بشه (مثلا 0 ) و اگه چک خورد مقداری ارسال بشه (مثلا ۱ ) .
یه چیزی دیدم تو فرمهای Zend Framework که این مشکل رو برطرف میکرد. برای اینکار کافیه یه عنصر از نوع hidden بالاتر از عنصر checkbox بگذارید، دقیقا به نام همون عنصر checkbox فقط مقدارش رو بگذارید همون مقداری که میخواید وقتی تیک نخورده ارسال بشه (مثل صفر تو مثال ما) بعد عنصر chekbox هم بگذارید و مقدار حالت تیک خورده رو توش بگذارید (تو این مثال یک) خوب اگه تیک نخوره، فرم که ارسال میشه، checkbox اصلا فرستاده نمیشه، ولی عنصر hidden که هست :) در مقابل وقتی چک خورده باشه، عنصر hidden چون قبل از عنصر checkbox هست، مقدارش با مقدار checkbox رونویسی میشه. کد باید اینطور باشه :
<form action="/some/address" method="post"> <input type="hidden" name="mycheckbox" value="0" /> <input type="checkbox" name="mycheckbox" value="1" /> </form>
برای سادگی کل قسمتهای زاید فرم، حذف شده ولی شما کل فرمتون رو بگذارید، فقط یادتون باشه که عنصر hidden باید قبل از عنصر chekbox باشه ، اسمشون هم یکی باشه.




