parsgreen.com
article

آموزش ساخت نقشه سایت (Sitemap) با php و xml

php-sitemap

یکی از روش هایی که تاثیر زیادی در معرفی هرچه بهتر سایت یا وبلاگ به موتورهای جستجو دارد، ایجاد نقشه سایت یا به اصطلاح Sitemap است، هرچند اکثر کاربران ترجیح می دهند که از تگ ul و li برای نقشه سایتشان استفاده کنند، اما آنچه پروتکل استاندارد وب توصیه می کند استفاده از نقشه سایت xml است، xml زبانی است که با پلتفرم های مختلف سازگار است و اکثر موتورهای جستجوگر معروف نیز از آن پشتیبانی می کنند و عضو sitemaps.org هستند؛ در این آموزش قصد داریم نحوه ایجاد و مدیریت یک نقشه سایت را در حد امکان به طور کامل توضیح دهیم، البته یادآور می شویم که درک این مطلب نیازمند داشتن دانش اولیه در php و mysql است.

شیوه نگارش (syntax) نقشه سایت


شیوه نگارش (syntax) یک نقشه سایت معمولی به شکل زیر است:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
</url>
<url>
<loc>http://www.example.com/?link=2</loc>
</url>
.
.
.
</urlset>
توضیح:
- encoding نقشه سایت باید UTF-8 باشد.
- sitemaps.org سایت رسمی پروتکل نقشه سایت است.
- تگ urlset برای هر نقشه سایت، تنها یک بار تکرار می شود.
- لینک ها را (ترجیحا) از بالاترین سطح تا پائین ترین سطح در تگ های url مرتب کنید.
- برای صفحه نخست سایت حتما / را در پایان آدرس قرار دهید.
- از به کار بردن کاراکترهای &, ', ", > و < در آدرس لینک ها خودداری کنید و به جای آنها از جایگزین html استفاده نمائید.

ایجاد نقشه سایت داینامیک


مسلما تعداد لینک های یک سایت داینامیک به چند عدد محدود نخواهد بود لذا برای مدیریت نقشه سایتمان باید از زبان های سمت سرور و از جمله php استفاده کنیم، در کد زیر ما اطلاعات فرضی را از پایگاه داده فراخوانی می کنیم و برای هر مطلب، لینک آن را به نقشه سایتمان اضافه کرده و در پایان لینک ها را در یک فایل با نام sitemap.xml کپی می کنیم:
<?php
//ابتدا یک فایل با نام sitemap.xml بسازید.
//ابتدا فایل را دریافت کرده و یک بار محتویات آن را پاک می کنیم
$file = "sitemap.xml";
chmod($file, 0755);//تنظیم مجوز های ویرایش
$fileHandle = fopen($file, 'w+')//استفاده از متد w+
or die("خطا: سطح دسترسی برای ویرایش فایل در سرور تنظیم نیست!");
$empty = "";//متغیر برابر خالی
//نوشتن در فایل
$stringData = $empty;
fwrite($fileHandle, $stringData);
fclose($fileHandle);

//باز کردن مجدد فایل
$file = "sitemap.xml";
chmod($file, 0755);
$fileHandle = fopen($file, 'a')//این بار با متد a
or die("خطا: سطح دسترسی برای ویرایش فایل در سرور تنظیم نیست!");
    
$start = "<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";
//نوشتن فایل با متد a
$stringData = $start;
fwrite($fileHandle, $stringData);

//صفحه نخست
$home = "<url><loc>http://example.com/</loc></url>\n";
//نوشتن
$stringData = $home;
fwrite($fileHandle, $stringData);
//قبل از اتصال به پایگاه داده باید اطلاعات اتصال را تعریف کنید
//دریافت اطلاعات پست ها از دیتابیس و تبدیل به لینک
$result = mysql_query("SELECT * FROM posts ORDER BY rank ASC")
or die(mysql_error());
while($row = mysql_fetch_array($result)){
    $id = $row['id'];
    $link = "<url><loc>http://example.com/?id=$id</loc></url>\n";
    //نوشتن
    $stringData = $link;
    fwrite($fileHandle, $stringData);
}
$end = "</urlset>";//بستن نقشه سایت
//نوشتن
$stringData = $end;
fwrite($fileHandle, $stringData);
fclose($fileHandle);
?>
توضیح:
- فایلی با نام sitemap.xml ترجیحا در ریشه سایت بسازید.
- در کد بالا ابتدا بعد از فراخوانی فایل یک بار با متد +w محتویات آن را پاک سازی می کنیم (این کار برای جلوگیری از تکرار لینک ها در هر بار به روزرسانی نقشه سایتمان است).
- مجدد فایل را این بار با متد a باز می کنیم و می نویسیم (فرق متد a و +w در این است که متد a به محتویات کنونی فایل خللی وارد نمی کند و در انتها کد جدید را اضافه می نماید اما متد +w فایل را خالی کرده و مجدد می نویسد).
- در مثال عنوان شده اطلاعات را از جدولی فرضی به نام posts دریافت کرده ایم و برای هر مطلب یک لینک به خروجی می دهیم.
- لینک های ما باید استاندارد html باشند و لذا استفاده از کارکترهای خاص که پیشتر گفتیم مجاز نمی باشد، می توانید از تابع htmlspecialchars در php نیز استفاده کنید.
- برای آپدیت مرتب نقشه سایت می توانید به عنوان مثال آن را در صفحه ای که مطالبتان را از آن ارسال می کنید ایمپورت کنید تا با هر بار ارسال مطلب جدید، اطلاعات به روز رسانی شوند.
استفاده از نقشه سایت به لینک های معمولی محدود نمی شود، محتویات دیگر صفحات وب از جمله تصاویر، ویدئوها، اخبار و... را نیز می توان در Sitemap گنجاند:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.sitemaps.org/schemas/sitemap-image/1.1"
        xmlns:video="http://www.sitemaps.org/schemas/sitemap-video/1.1">
<url>
<loc>http://www.example.com/</loc>
<image:image>
<image:loc>http://example.com/imagename.jpg</image:loc>
</image:image>
<video:video>     
<video:content_loc>http://www.example.com/videofilename.flv</video:content_loc>
<video:player_loc allow_embed="yes" autoplay="ap=1">http://www.example.com/videoplayer.swf?video=videofilename</video:player_loc>
<video:thumbnail_loc>http://www.example.com/thumbs/videofilename.jpg</video:thumbnail_loc>
<video:title>عنوان ویدئو</video:title>  
<video:description>توصیف ویدئو</video:description>
</video:video>
</url>
<url>
<loc>http://www.example.com/?link=2</loc>
</url>
.
.
.
</urlset>

افزودن تاریخ و اطلاعات بیشتر به sitemap


علاوه بر تگ <loc> که آدرس لینک ها را در آن قرار می دهیم، از چند تگ (اختیاری) دیگر نیز می توانیم در نقشه xml سایت خود استفاده کنیم، از جمله <lastmod> برای نمایش تاریخ ایجاد یا به روز رسانی لینک، <changefreq> که دوره تغییر یک لینک را مشخص می کند و <priority> که میزان اهمیت آن را نسبت به سایر لینک ها نشان می دهد.
<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
<lastmod>2012-03-20</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>http://www.example.com/?link=2</loc>
<lastmod>2012-02-18T21:45:19+03:30</lastmod>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
.
.
.
</urlset>
توضیح:
- فرمت <lastmod> می تواند به صورت تاریخ ساده، یا تاریخ همراه زمان و اختلاف زمانی باشد (در مثال بالا از هر دو روش استفاده کرده ایم).
- <changefreq> می تواند مقادیری مثل ماهیانه (monthly)، هفتگی (weekly)، ساعت به ساعت (hourly)، روزانه (daily)، سالیانه (yearly)، همیشگی (always) و یا هرگز (never) باشد.
- <priority> میزان اهمیت لینک را مشخص می کند، این مقدار می تواند به ترتیب از کم اهمیت ترین (0.0) تا پراهمیت ترین (1.0) در نوسان باشد.
sectionدسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
» ارسال ایمیل با php و کلاس phpmailer
» نمایش قسمتی از متن و پاراگراف با php
» تبدیل تاریخ میلادی به شمسی، با استفاده از مبدل jdf در php
» ساخت فید خوان آر اس اس (RSS Feed Reader) با php
» نحوه نمایش متن و تصاویر اتفاقی در php و mysql
commentنظرات (۵۲ یادداشت برای این مطلب ارسال شده است)
نویسنده: مجتبی
زمان: ۱۹:۴۱:۲۹ - تاریخ: ۱۳۹۱/۰۴/۲۵
دستت درد نکنه برای ایجاد این مطالب.
پاسخ: 
خواهش می کنیم.
نویسنده: مجتبی
زمان: ۱۹:۴۲:۵۰ - تاریخ: ۱۳۹۱/۰۴/۲۵
اگه میشه آموزش پی اچ پی رو با مثال بذارین رو سایت.
پاسخ: 
اگر به منوی سمت راست توجه کنید، آموزش مقدماتی و کاربردی php را ملاحظه خواهید کرد، آموزش ها عموما همراه با مثال هستند.
نویسنده: ahmadi
زمان: ۱۷:۰۸:۲۱ - تاریخ: ۱۳۹۱/۰۸/۰۶
سلام من میخوام یه سایت فروشگاهی با php & mysql بسازم میشه شما پروژه ساخت فروشگاه رو بسازین و به صورت pdf یا همون در سایت انتشار بدین
پاسخ: 
سلام
ساخت یک سایت فروشگاهی، پروژه به ظاهر ساده ولی از نظر برنامه نویسی گسترده و دارای جزئیات زیاد است، برای این کار باید تجربه نوشتن برنامه های کوچکتر را داشته و با مباحث زیادی آشنا باشید، به طور مثال با انواع ویرایشگرهای html (قسمت ارسال مطلب)، مباحث مربوط به توابع، آرایه ها، نشست ها و ... لذا ملاحظه می کنید که موارد را باید به صورت جزئی یاد بگیرید و در نهایت در قالب یک مجموعه به کار ببرید، گردآوری آنها در قالب یک فایل pdf امکان پذیر نیست!
نویسنده: ehsan
زمان: ۱۳:۲۸:۱۱ - تاریخ: ۱۳۹۱/۱۲/۲۲
سلام
اموزش بسیار خوبی بود،دستتون درد نکنه.
یک سوال من سایتی که نوشتم لینکاش به این صورت هست.
http://www.exapmle.com/article?id=4&title=tutorial
راهی نیست استاندارد کنم؟ چون کاراکتر & غیر مجازه گفتین.
با تشکر
پاسخ: 
سلام
همان طور که در آموزش گفته ایم، راه حل آن استفاده از توابعی مانند htmlspecialchars در php است، به فرض این تابع کاراکتر & را به صورت معادل html آن یعنی
&amp;
تبدیل می کند که استاندارد است، مثال و نحوه استفاده:
    $link = htmlspecialchars("<url><loc>http://example.com/?id=$id&title=$title</loc></url>\n");
نویسنده: هادی
زمان: ۲۰:۳۳:۴۸ - تاریخ: ۱۳۹۱/۱۲/۲۹
با سلام
جناب بله با موفقیت انجام میشه اما تو فراخوانی ادرس هیچ چیز نمایش نمیده چرا
ممنون می شم جواب منو بدین اینم لینکش
www.bonabagahi.ir/sitemap.xml
پاسخ: 
سلام
نقشه xml سایت تنها مجموعه ای از دستورات ساده و معمولا حاوی لینک های یک سایت بر اساس استاندارد sitemaps است، چیز دیگری نمایش داده نمی شود، نباید آن را با شیوه های دیگر مانند استفاده از تگ ul و li در html اشتباه بگیرید.
نویسنده: هادی
زمان: ۰۰:۳۸:۱۹ - تاریخ: ۱۳۹۱/۱۲/۳۰
با سلام
ممنونم
درست شد
خیلی خیلی ممنون
تشکر از زحمات شما
نویسنده: ana
زمان: ۱۱:۱۹:۰۹ - تاریخ: ۱۳۹۲/۰۲/۰۹
سلام. من میخوام سایت اموزشگاه طراحی کنم نمی دونم از کجا شروع کنم لطفا منو راهنمایی کنید. مرسی
پاسخ: 
سلام
اطلاعات مطرح شده در سوال طوری نیست که بتوانیم به درستی راهنمایی کنیم! منظور از سایت آموزشگاه دقیقا چه نوع سایتی است؟ میزان آشنایی شما با زبان های برنامه نویسی و اصول مربوط به وب تا چه حد است؟ قصد دارید از برنامه های آماده استفاده کنید یا اینکه می خواهید سیستم مدیریت سایت را خودتان بنویسید؟
به هر صورت با فرض آشنایی مقدماتی، ابتدا باید با اصول و مبانی وب آشنا باشید، سپس زبان های سطح پائین مانند HTML و CSS را یاد بگیرید، بعد از این مراحل تصمیم بگیرید که از CMS های موجود (متناسب با هدف سایت و پس از بررسی امکانات و پشتیبانی) استفاده کنید یا اینکه قدم به مرحله پیشرفته کار یعنی کدنویسی جاوا اسکریپت، PHP، MySQL و... بگذارید.
نویسنده: ana
زمان: ۲۳:۴۸:۱۳ - تاریخ: ۱۳۹۲/۰۲/۱۱
سلام. ممنون که جواب دادین. میخوام سایت یه اموزشگاه ازاد هنری رو طراحی کنم که کلاسای نقاشی و خوشنویسی و... رو داره که میخوایم کارای این اموزشگاه رو تو سایت انجام بدیم . با وب نویسی اصلا اشنایی ندارم . برنامه نویسی هم مقدماتی بلدم . این پروژه هم اجباریه. اگه میشه لطف کنید کمک کنید. اگه از کدای اماده استفاده کنم باید بدونم چه طور کار می کنن
پاسخ: 
سلام
به هر صورت انجام هر کاری نیازمند داشتن تجربه و مهارت در آن است، اگر نیاز شما این است که سایتی با امکانات سفارشی داشته باشید، پس باید وقت بگذارید، یاد بگیرید و تمرین و تکرار داشته باشید، یا اینکه روش های ساده تر مانند استفاده از CMS های آماده را انتخاب کنید و یا نهایتا این کار را به افراد و شرکت های مرتبط بسپارید، متاسفانه خارج از این شرایط راه حل دیگری وجود ندارد.
نویسنده: sina
زمان: ۲۱:۱۶:۰۳ - تاریخ: ۱۳۹۲/۰۵/۲۷
خیلی خوبه واقعا ادامش بدین
نویسنده: الیاس
زمان: ۱۸:۲۰:۳۴ - تاریخ: ۱۳۹۲/۰۷/۲۶
سلام
سایتتون عـــــــــالیه
کاش آموزش ایجاد در گاه پرداخت هم در سایتتون قرار بدهید.
پاسخ: 
سلام
ممکن است در آینده این کار صورت گیرد!
نویسنده: پرویز
زمان: ۱۰:۳۹:۲۶ - تاریخ: ۱۳۹۲/۰۷/۳۰
سلام, ببخشید آیا طراحی سایت های ایستا راحت تر است یا طراحی سایت های پویا و باید چه اصول و قوانینی در طراحی یک سایت پویا و حرفه ای را رعایت کنیم. ممنون می شوم اگر جواب من را بدهید.
پاسخ: 
سلام
قاعدتا طراحی سایت های استاتیک راحت تر است، البته محدودیت های زیادی خواهید داشت و قدرت مانورتان محدود به طراحی صفحات ثابت از پیش تعریف شده است و نمی توانید به صورت سیستماتیک آنها را به روز کنید (باید دستی انجام شود)، در مورد سایت های پویا هم می توانید از CMS های رایگان بدین منظور استفاده کنید که در این صورت نیاز به داشتن دانش حرفه ای در برنامه نویسی نیست، هم می توانید سیستم را خودتان طراحی کنید که این کار نیازمند تجربه بالا و یادگیری زبان های خانواده وب (HTML, CSS , JavaScript, PHP و...) است.
نویسنده: پرویز
زمان: ۱۸:۱۳:۴۵ - تاریخ: ۱۳۹۲/۰۷/۳۰
سلام, به نظر من چیزی در این دنیا نیست که نتوانیم آن را یاد بگرییم و چیزی غیر ممکنی در آن وجود ندارد اما باید علاقه, پشتکار, تمرین, برنامه ریزی های مشخص و منظم و توکل به خداوند بزرگ داشته باشیم و خصوصا طرح پرسش و و پاسخ و مشورت را فراموش نکنیم و ضرب المثل معروف که می گوید: "نادان نه میداند و میپرسد؛ دانا هم میداند و هم میپرسد. " را به یاد بیاوریم و اصول کارهای خود قرار دهیم.
پاسخ: 
سلام
قطعا همین طور است که گفتید.
نویسنده: ابوالفضل
زمان: ۰۱:۰۳:۰۶ - تاریخ: ۱۳۹۲/۱۰/۱۰
سلام آیا میشه در پی اچ پی کدی نوشت که تعداد فایل ها با پسوند خاصی را در یک پوشه را نمایش بدهد
به فرض مثلا ما می خواهیم تعداد فایلها با فرمت xml در پوشه folder نمایش داده شود ممنون میشم راهنمایی نمایید
پاسخ: 
سلام
می توانید از نمونه کد زیر استفاده کنید:
<?php
$folder = dirname(__FILE__).'\\folder';
//echo $folder;
$handel = opendir($folder);
$count = 0;
while((($name = readdir($handel)) != FALSE)){
$format = preg_match('/([\xml]+$)/', $name);
if($format){
//echo $name.'<br>';
$count++;
}
}
echo $count;
?>
نکته: آدرس فولدر به صورت کامل و صحیح باید تنظیم شود، در نمونه کد، فولدر با فایل PHP در یک دایرکتوری قرار دارند.
نویسنده: ابوالفضل
زمان: ۱۰:۵۴:۴۰ - تاریخ: ۱۳۹۲/۱۰/۱۱
سلام خیلی ممنونم که کمکم کردید
نویسنده: بهنام
زمان: ۱۲:۱۷:۵۸ - تاریخ: ۱۳۹۲/۱۱/۲۶
سلام سایت بسیار پر درآمد و آموزنده ای دارین ممنونم که به ما خدمت می کنید و وقت گران بهاتون رو در اختیار ما می گذارید بسیار ممنون
من یه سوال داشتم خارج از مطالب سایت هست و نمیدانم کجا سوالم را بپرسم لطفا همینجا پاسخ مرا بدهید:
من یک چت روم درست کردم با پی اچ پی و ایجکس وقتی که خودم تایپ می کنم ارسال می کنم پیام هام نمایش داده میشه ولی وقتی که کسی دیگری پیام بده و ارسال کنه پیام های اون را من نمیتوانم ببینم و فقط خود شخص میتواند ببیند
کد ها رو اینطوری تعریف کردم
دستور ایجکس این است که وقتی متن را در کادر نوشت و ارسال را زد با دستوران ایجکس آن متن را در فیلد بالا سلکت و چاپ کند و فقط برای خود کاربری که دکمه ی ارسال میزند چاپ می کند نه کسی دیگری این مشکل را چگونه حل کنم لطفا راهنماییم کنید بعضی ها میگن باید با جیکوری حل بشه
پاسخ: 
سلام
طراحی سیستم چت در وب نیاز به تسلط و تجربه بالا در کار با جاوا اسکریپت، آژاکس و PHP دارد.
اطلاعات کاربر باید در دیتابیس ذخیره شده و برای آن یک گیرنده متناظر تعریف شود، سپس گیرنده پیام توسط درخواست آژاکسی آخرین ارسال کاربر مقابل را دریافت کند، البته این تنها یک الگوی ساده است، در یک برنامه کاربردی قواعد زیادی باید رعایت و حالت های مختلف در نظر گرفته شود.
paged صفحه 1 از 4




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

6 × 3
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...