در آموزش های قبلی نحوه ساخت xml توسط php با کتابخانه آماده را به شما نشان دادیم . در این مقاله آموزشی نحوه ساخت نقشه سایت با php و mysql را خواهیم دید.
نقشه سایت (Sitemap) یک سند xml میباشد که لینک های مطالب شما را با آخرین تاریخ ویرایش و اهمیت لینک و … فهرست میکند. این فایل در شاخه اصلی وبسایت (ROOT) با نام sitemap.xml ذخیره میشود و هدف از آن آگاه سازی سریع موتورهای جستجو برای فهرست کردن این لینکها در نتایج جستجویشان است.
نقشه سایت چیست؟
نقشه سایت یا sitemap راهی برای معرفی صفحات سایت شما به موتورهای جستجو است. نقشه سایت که xml Sitemap نام دارد معمولا با نام Sitemap به کار برده میشود، که تمام صفحاتی را که میخواهید قابل دسترس باشد را لیست میکند. ساخت نقشه سایت و ثبت آن در موتورهای جستجو به شما این اطمینان را میدهد که تمام صفحات سایت شما در موتورهای جستجو لیست شود. همچنین شما میتوانید از این طریق صفحاتی را که فکر میکنید پیدا کردن آن برای موتورهای جستجو مشکل خواهد بود را نیز معرفی کنید.
یکی از مواردی که ابزار قدرتمند گوگل وبمستر (GOOGLE WebMaster) به آن بسیار اهمیت میدهد وجود نقشه سایت است . پس همین الان اقدام ساخت نقشه سایت و ثبت آن در گوگل کنید.
نقشه سایت زمانی با اهمیت تر میشود که:
- سایت شما از مطالب داینامیک استفاده کند.
- سایت شما دارای صفحاتی میباشد که به راحتی توسط روبات موتورهای جستجو قابل دسترسی نیست. مانند صفحاتی که محتویات آن با تکنولوژی Ajax بارگذاری میشود.
- سایت شما جدید است و به خوبی در وب لینک دهی نشده است.
- سایت شما دارای محتویات حجیم چند صفحه ای است و به خوبی به یک دیگر لینک دهی نشده است
گوگل فهرست کردن تمام صفحات شما را تضمین نمیکند و اظهار میکند که نقشه سایت فقط یک راهنما برای فهرست کردن درست صفحه های وب است.
گوگل از پروتکل استاندارد نقشه سایت که توسط sitemaps.org طراحی شده است استفاده میکند و در حالت کلی نقشه سایت ساخته شده برای تمام موتورهای جستجوی استاندارد قابل فهم است.
فرمت فایل XML :
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="utf-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://example.com/</loc> <lastmod>2006-11-18</lastmod> <changefreq>daily</changefreq> <priority>0.8</priority> </url> </urlset> |
برای آشنایی با المانهای کد بالا میتوانید به لینک تعریف المانها در ویکی پدیا مراجعه کنید.
ایجاد فایل نقشه سایت توسط PHP:
برای ساختن نقشه سایت نیاز به ایجاد اسکلت اولیه آن دایم. برای این کار یک فایل با نام sitemap.php ایجاد کرده و کد زیر را در آن ذخیره کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$host = "localhost"; // host name $user = "user"; // database user name $pass = "password"; // database password $database = "dbname"; // database name // connecting to database try{ $con = new PDO ("mysql:host=$host;dbname:$database","$user","$pass"); $con->exec("SET CHARACTER SET utf8"); return $con; } catch(PDOException $error) { echo "Error in Connect"; } ?> |
در کد php بالا ما به دیتابیس mysql با PDO متصل می شویم (اتصال به دیتابیس با PDO در PHP)
ایجاد کدهای xml:
کد زیر را در فایل sitemap.xml بعد از کدهای اتصال به پایگاه داده ذخیره کنید:
1 2 3 4 |
// default header(don't delete) header("Content-Type: text/xml;charset=iso-8859-1"); echo '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; |
با کد بالا یک هدر http برای فایل xml ایجاد می کنیم و همچنین بلاک های مورد نیاز قالب XML را در صفجه چاپ می کنیم.
اضافه کردن url ها در xml:
در کد زیر یک جدول پایگاه داده با نام mytable با فیلدهای url و date برای مطالب در نظر گرفته ایم. کد زیر را بعد از کد بالا در فایل sitemap.xml ذخیره کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// selecting data from "mytable" $query="SELECT * FROM mytable"; $result=$con->query($query); while( $rows = $result->fetch(PDO::FETCH_ASSOC) ){ // [url] = article url $url = $rows['url']; // [time] = article date $date = date("Y-m-d", $rows['time']); // NO CHANGES BELOW echo '<url> <loc>' . $url .'</loc> <lastmod>'. $date .'</lastmod> <changefreq>daily</changefreq> <priority>0.8</priority> </url> '; } echo '</urlset>';?> |
به همین راحتی توانستیم یک نقشه سایت (sitemap) به صورت XML ایجاد کنیم .
کد کامل ساخت نقشه سایت با PHP و MySQL :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php $host = "localhost"; // host name $user = "user"; // database user name $pass = "password"; // database password $database = "dbname"; // database name // connecting to database try{ $con = new PDO ("mysql:host=$host;dbname:$database","$user","$pass"); $con->exec("SET CHARACTER SET utf8"); return $con; } catch(PDOException $error) { echo "Error in Connect"; } // selecting data from "mytable" $query="SELECT * FROM mytable"; $result=$con->query($query); while( $rows = $result->fetch(PDO::FETCH_ASSOC) ){ // [url] = article url $url = $rows['url']; // [time] = article date $date = date("Y-m-d", $rows['time']); // NO CHANGES BELOW echo '<url> <loc>' . $url .'</loc> <lastmod>'. $date .'</lastmod> <changefreq>daily</changefreq> <priority>0.8</priority> </url> '; } echo '</urlset>'; ?> |
اگر دقت کرده باشید فایل ما به صورت sitemap.php است و ما میخواهیم به فایل sitemap.xml برسیم. برای این کار کد زیر را در فایل htaccess. در شاخه اصلی وبسایت ذخیره کنید:
1 2 3 4 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule (.*)\.xml(.*) $1.php$2 [nocase] </IfModule> |
بعد از اضافه کردن کد بالا در فایل htaccess. آدرس نقشه سایت شما هنگام فراخوانی، از www.example.com/sitemap.php به www.example.com/sitemap.xml تبدیل میشود. یعنی شما آدرس نقشه سایت را با فرمت xml در موتورهای جستجو ثبت خواهید کرد.
امیدوار از آموزش ساخت نقشه سایت با PHP و MySQL نهایت استفاده را برده باشید
هرگونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید
سلام وقت بخیر
من هنگامی که از کدها استفاده می کنم ، در خروجی مقادیری که در دیتابیس فارسی ذخیره شدند به صورت زیر نمایش داده می شوند:
دوره-تستی۱
چگونه مشکل رفع میشه؟
سلام
$mysqli->set_charset(“utf8”)
و ستون مربوطه رو در دیتابیس utf8_persian_ci بزارید
سلام من دقیقا همه کار هایی که گفتین انجام دادم اما باز برام صفحه سفید میاد میزنم مثلا:
https://yourdomain.ir/sitemap.php
اسم جدول داخل دایتابس من : posts
نام دو سطری که میخوام ازشون اطلاعات بخواند : post_id و time هست
اطلاعات دیتابس تغییر دادم درست نیستن
exec(“SET CHARACTER SET utf8”);
return $con;
}
catch(PDOException $error)
{
echo “Error in Connect”;
}
// default header(don’t delete)
header(“Content-Type: text/xml;charset=iso-8859-1”);
echo ‘
‘;
// selecting data from “mytable”
$query=”SELECT * FROM posts”;
$result=$con->query($query);
while( $rows = $result->fetch(PDO::FETCH_ASSOC) ){
// [url] = article url
$url = $rows[‘post_id’];
// [time] = article date
$date = date(“Y-m-d”, $rows[‘time’]);
// NO CHANGES BELOW
echo
‘
‘ . $url .’
‘. $date .’
daily
۰٫۹
‘;
}
echo ”;
?>
سلام. اول ببینید در صفحه چه اروری هست اگه صفحه سفید میاد یا خطا هست یا اینکه هیچ اطلاعاتی از دیتابیس خونده نمیشه
سلام مجدد داخل دیتابیس اطلاعات دارم نام دیتابس و رکورد هامم درسته.
چه خطایی میتونه باشه. ممنون میشم زاهنمایی کنید
شما کد منو دیدین درسته؟ در ساختارش اشتباهی نکردم؟
سلام مشکلی در کد دیده نمیشه. احتمالا خطای خود محیط اجرا هست ورژن php رو بالا پایین کنید و اتصال دیتابیس رو بررسی کنید
سلام وقتبخیر من این کد رو استفاده میکنم ولی هیچ چیزی ثت نمیشه فقط صفحه سفید نشون داده میشه
کد:
بود که خطا میداد حذف کردم و صفحه سفید میشه و هیچ چیزی نمیاره
مشکل از چی هست؟
سلام. ممنون.
کد رو باید بصورت کامل و در یک فایل آپلود و ارسال کنید تا بشه راهنمایی کرد.
همچنین آموزش های php رو شروع کنید دوباره مرور کنید.
موفق باشید.
سلام فایل رو من ایمل کرده بودم دیدم ارسال نشده اشتباه زده بودم ایمیلتون رو الان روی هاست آپلود کردم رمزش ۱۲۳۴۵۶ هست لطفا فایلهای feedee.php و go2.php و funection.php رو ببینید چکارهایی باید انجام بدم من میخوام یه صفحه درست کنم بعد از مثلا هزارتا لینک ثبت شده اسم لینک کوتاه رو حذف کنم و یه اسم رندوم جدیدد جایگزینش کنم بخاطرش هم یه تابع رندوم نوشتم براش فقط اینکه چکار کنم تا این صفحه کار کنه رو موندم مننون میشم نگاه کنید بهم مشکلاتمو بگید راستی با استفاده از تابع هم اطلاعات لینک رو دراوردم بنظرم سرعتش از curl بیشتر هست و به لوکال اندازه curl فشار نمیاره ولی میخوام حالت آپدیت لینک رو هم بذارم تا هروقت از لینک بازدید شد بصورت خودکار عنوان تایتل لینک تو دیتابیس هم آپدیت بشه
سلام. لینکی که ارسال کردید موجود نبود. لطفا دیگر سوالات مربوط به این مورد رو از طریق نظرات ارسال نکنید و در ایمیل پیگیر باشید.
سلام وقت بخیر من با رز آپ آپلود کردم نگاه کنم بینم چیشده چون لپ تاپش پیشم نیست شاید ادمین وبلاگ پاگ گرده چشم ایمل میزنم مشکل اینکه اینجا کد کار نمیکردم پیدا کردم وقتی کد رو کپی میکنید و اجرا میکنید خطای زیر رو میده
Parse error: syntax error, unexpected ‘}’ in D:\0000000111\htdocs\cod\cod\xmlx.php on line 36
برای رفع خطا به خط ۲۱ خودتون هم نگاه کنید
while( $rows = $result->fetch(PDO::FETCH_ASSOC) )
خط ۲۱ کدتون در آخر خط یه { اضافه کردنی خطا رفع میشه مثل کد زیر
while( $rows = $result->fetch(PDO::FETCH_ASSOC) ){
در انتهای خط ۲۱ یک { اضافه کردم خطا رفع شد
عکس های سورس قبل از { اضافه کردن
http://8upload.ir/uploads/f566195.jpg
و بعد از { اضافه کردن
http://8upload.ir/uploads/f286732637.jpg
ممنون
سلام. ممنون.
انگار مشکلتون حل شده پس اوکی هست.
یادگیری رفع این چنین خطاهای سینتکس از موارد پایه و ابتدایی کار با php هست
ide خودتون رو هم اگر سیستمتون رم و cpu خوبی داره میتونید به phpstorm تغییر بدید تا دیباگ کردن آسان تر بشه
موفق باشید.
سلام خسته نباشید
کد رو اجرا کردنی خطای
Parse error: syntax error, unexpected ‘}’, expecting end of file in C:\xampp\htdocs\dashboard\cod\0t\link.php on line 36
دلیل خطاش هم این هست
در خط ۲۱
باید کد زیر قرار میگرفت
while( $rows = $result->fetch(PDO::FETCH_ASSOC) ){
ولی احتمالا هنگام ارسال یا اشتباهی از کدهای حذف شده
و این کد درج شده
while( $rows = $result->fetch(PDO::FETCH_ASSOC) )
که در کد
بجای (
از
{
ثبت شده و یدونه هم
} کلا کم هست و ثبت نشده
لطفا صحیح کنید کاربرا اشتباه نکنن
چون دیدم یکی از کاربرا هم قبلا گفته بودن مشکل داره و خود کاربرهم تو توضیحش باز اشتباه نوشته
سلام ممنون از توجه شما
اصلاح شد.