PDA

View Full Version : ایجاد navigation bar در php



zohreh.hn
سه شنبه 12 آذر 1392, 19:01 عصر
سلام من می خواهم بالای صفحاتم مسیری که کاربر در سایت طی نموده است را نشان دهم بصورت صفحه اول>صفحه دوم> و ... لطفا مرا راهنمایی کنید. ممنون

Javidhb
سه شنبه 12 آذر 1392, 19:52 عصر
اسمش Breadcrumb هست.



//انتخاب http یا https
$protocol = $_SERVER["SERVER_PROTOCOL"]=='HTTP/1.1' ? 'http' : 'https';
$url = $protocol.'://'.$_SERVER['HTTP_HOST'].'/'; //root of your site

$crumbs = explode("/",$_SERVER["REQUEST_URI"]); //قرار دادن هر یو آر آی توی آرایه

foreach($crumbs as $crumb){
if($crumb != '')
{
//مرتب کردن اسم صفحات
$part = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
echo '<a href="'.$url.$crumb.'">'. $part .'</a>'. '->'; // ساختن لینک
}
}


ولی بهتره از ایــــن (http://phpro.org/classes/Breadcrumbs.html)کلاس استفاده کنید.

zohreh.hn
چهارشنبه 13 آذر 1392, 15:09 عصر
با سلام ممنون از کد
اما سوال دیگه اینکه این کد مسیر دقیق روی نوار آدرس را نشان میدهد مثل site>showp1?id=100 درصورتی که من می خواهم بجای showp1?id=100 یک اسم قابل فهم برای کاربر نشان دهم

Javidhb
چهارشنبه 13 آذر 1392, 16:07 عصر
میتونید با preg_replace همه کاراکترهای بعد از علامت سوال رو حذف کنید.

تغییر قسمتی از کد بالا:


//...
$url = preg_replace('/(\?.*)/','',$_SERVER["REQUEST_URI"]); //حذف کاراکترهای بعد از علامت سوال
$crumbs = explode("/", $url); //قرار دادن هر یو آر آی توی آرایه
//....

zohreh.hn
شنبه 16 آذر 1392, 14:13 عصر
ممنون از شما حالا یک سوال دیگه دارم.
مثلا از صفحه ایندکس وارد صفحه shownews می شم بجای اینکه بعد از ایندکس >شونیوز را نشان دهد بجای ایندکس شو نیوز را نشان می دهد.
یعنی بعد از Basatan shenasi site >Index باید Basatan shenasi site> Index> shownews را نشان دهد ولی Basatan shenasi site >shownews را نشان می دهد چرا اینطور است؟

MMSHFE
شنبه 16 آذر 1392, 15:27 عصر
ساخت Bread Crumb از روی URL بنظر کار اشتباهی میاد چون همه جا URL Rewrite امکان پذیر نیست و کلی Rule و... باید تعریف کنید (مثلاً index.php رو Index نشون بده و...) و اگه مثلاً توی آدرس index.php حذف شد، مثل مشکل شما، Index هم حذف میشه. راه مناسب اینه که برای مطالب، دسته بندی بگذارین و دسته بندیها ساختار درختی داشته باشه (شاخه های فرعی id شاخه اصلی رو توی رکوردشون داشته باشن و شاخه های اصلی هم id والدشون null باشه). مطالب هم فیلد cat_id یا اسمی شبیه اون داشته باشن که شاخه مربوطه رو مشخص میکنه. حالا وقتی یک مطلب رو نشون میدین، با پیمایش Recursive رو به عقب، میتونید همه دسته بندیها رو تا زمان رسیده به دسته بندی اصلی بدست بیارین و اگه از آخر به اول نشون بدین، دسته بندی بصورت بالا به پایین تولید میشه. امیدوارم تونسته باشم منظورم رو برسونم. درغیر اینصورت بفرمایید تا مثال بزنم.

zohreh.hn
یک شنبه 17 آذر 1392, 15:31 عصر
ممنون از شما
لطفا با مثالی برای من توضیح بیشتر دهید. مثلا من یک سایت طراحی کرده ام که یک صفحه ی اصلی به نام ایندکس و یک صفحه ی مشاهده ی اخبار به نام شونیوز دارم و تعدادی صفحات دیگر. وقتی سایت بالا می آید ابتدا صفحه ی اصلی یا همون ایندکس نمایش داده می شود و با رفتن روی لینک یک خبر به صفحه مشاهده خبر می رود. این مسیر را چطور می شود مدیریت کرد. ممنون

zohreh.hn
دوشنبه 25 آذر 1392, 18:02 عصر
جناب مدیر بخش با تشکر لطفا یک مثال بزنید ممنون میشم

MMSHFE
دوشنبه 25 آذر 1392, 19:04 عصر
ببینید، شما مثلاً یک جدول دسته بندی دارین به اسم categories با سه فیلد id و name و pid که pid میشه id دسته والد و برای دسته های اصلی، pid مقدارش 0 هست. توی جدول مطالب هم یک فیلد اضافه میکنید به اسم cat_id که ازطریق اون مشخص میشه هر مطلب توی کدوم دسته قرار میگیره. حالا با کد زیر موقع نمایش هر مطلب، میتونید Breadcrumbs رو ایجاد کنید:


function BreadCrumbs($cat_id) {
$cat_id = intval($cat_id);
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database name');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
$breadCrumb = '';
$category = mysql_query("SELECT * FROM `categories` WHERE (`id`='{$cat_id}') LIMIT 1");
if($category && mysql_num_rows($category) == 1) {
$category = mysql_fetch_assoc($category);
$breadCrumb = ' > ' . $category['name'] . $breadCrumb;
if($category['pid'] != 0) {
$breadCrumb = BreadCrumbs($category['pid']) . $breadCrumb;
}
}
return $breadCrumb;
}

$breadCrumbs = BreadCrumbs($article['cat_id']);
echo mb_substr($breadCrumbs, 3, mb_strlen($breadCrumbs, 'utf-8'), 'utf-8');

omidabedi
دوشنبه 25 آذر 1392, 19:06 عصر
جناب مدیر بخش با تشکر لطفا یک مثال بزنید ممنون میشم

یعنی هر صفحه رو جز دسته بندی قرار بدید.بعد نام دسته بندیشو نمایش بدید.
مثلا تعدادی از صفحات برای تنظیمات هست پس cat_name میشه تنظیمات
حالا تعدادی صفحه که زیرمجموعه ی تنظیمات میشن از یک cat_id استفاده میکنن و ....
هر کدوم از این ها باز میشه زیرمجموعه داشته باشه مثل
تنظیمات->حساب کاربری
تنظیمات->تنظیمات قالب
.
.
.

کلا یه taxonomy and terms جداگانه میتونید طراحی کنید یا اصلا نه میتونید از نام صفحه برای breadcrumb استفاده کنید و ....