PHP Basit dinamik kırıntı

6 Cevap php

Ben bu script buralarda herhangi bir çaylak :) benim de dahil olmak üzere büyük ilgi olduğunu düşünüyorum :)

Ne oluşturmak istediğiniz herhangi bir dosya kullanabilir ve böyle bir kırıntı üretecek küçük bir koddur:

Dosya adı "website.com/templates/index.php" kırıntı göstermelidir:

Website.com > Templates

^ ^ link                    ^^plain metin

Dosya adı "* website.com / şablonları / template_some_name.php *" kırıntı göstermelidir:

Website.com > Templates > Template Some Name

^ ^ link                   ^^link                ^^plain metin

Ben, teşekkürler herhangi bir cevap için minnettarım!

6 Cevap

Hmm, sana verdiğim örneklerden o "$ _SERVER ['REQUEST_URI']" ve explode() function size yardımcı olabilecek gibi görünüyor. Her ileri-çizgiyle de onu ayıran bir diziye etki alanı adı aşağıdaki URL'yi kırmaya patlayabilir kullanabilirsiniz.

Bir çok temel bir örnek olarak, böyle bir şey uygulanabilir:

$crumbs = explode("/",$_SERVER["REQUEST_URI"]);
foreach($crumbs as $crumb){
    echo ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
}

Bu basit bir ekmek kırıntısını için overkill olabilir, ama denemeye değer. Ben ilk başladığımda çok uzun zaman önce bu sorunu olan hatırlıyorum, ama ben gerçekten hiç çözülmüyor. Ben şimdi bu kadar yazmaya karar verene kadar olmasıdır. :)

Ben 3 olası kullanım durumları altta, ben satır içi iyi gibidir belgeledi. Tadını çıkarın! (Olabilecek herhangi bir soru sormak için çekinmeyin)

<?php

// This function will take $_SERVER['REQUEST_URI'] and build a breadcrumb based on the user's current path
function breadcrumbs($separator = ' &raquo; ', $home = 'Home') {
    // This gets the REQUEST_URI (/path/to/file.php), splits the string (using '/') into an array, and then filters out any empty values
    $path = array_filter(explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)));

    // This will build our "base URL" ... Also accounts for HTTPS :)
    $base = ($_SERVER['HTTPS'] ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/';

    // Initialize a temporary array with our breadcrumbs. (starting with our home page, which I'm assuming will be the base URL)
    $breadcrumbs = Array("<a href=\"$base\">$home</a>");

    // Find out the index for the last value in our path array
    $last = end(array_keys($path));

    // Build the rest of the breadcrumbs
    foreach ($path AS $x => $crumb) {
        // Our "title" is the text that will be displayed (strip out .php and turn '_' into a space)
        $title = ucwords(str_replace(Array('.php', '_'), Array('', ' '), $crumb));

        // If we are not on the last index, then display an <a> tag
        if ($x != $last)
            $breadcrumbs[] = "<a href=\"$base$crumb\">$title</a>";
        // Otherwise, just display the title (minus)
        else
            $breadcrumbs[] = $title;
    }

    // Build our temporary array (pieces of bread) into one big string :)
    return implode($separator, $breadcrumbs);
}

?>

<p><?= breadcrumbs() ?></p>
<p><?= breadcrumbs(' > ') ?></p>
<p><?= breadcrumbs(' ^^ ', 'Index') ?></p>

hey cevap dominic güzeldi ama senin http://localhost/project/index.php 'projesi' bağlantısı $ tabanının parçası beri tekrarlanan ve aynı zamanda $ yol dizide görünür olur gibi bir site varsa. Yani tweaked ve $ yol dizisindeki ilk öğe kaldırıldı.

//Trying to remove the first item in the array path so it doesn't repeat
array_shift($path);

Ben en zarif yolu olup olmadığını bilmiyorum, ama şimdi benim için çalışıyor.

Ben hat 13 falan bu bir önce bu kodu ekleyin

// Find out the index for the last value in our path array
$last = end(array_keys($path));

Ben, Dominic Barnes kodu ile başladı cWoDeR gelen geribildirim dahil ve ben bir alt-dizin kullanıldığında hala üçüncü düzeyde kırıntıları ile sorunları vardı. Yani yeniden yazdım ve aşağıdaki kodu dahil ettik.

Ben sayfaları aşağıdaki gibi kök düzeyinde bir sayfa (bağlantılı) kurulur tâbi olmak için böyle benim web sitesi yapısını kurmak olduğunu unutmayın:

  • Kök düzeyinde bir klasör olarak, (harfler dahil) dosyası olarak ÖZDEŞ aynı adı, eksi eki ile bir klasör oluşturun

  • Bu klasörün içine tüm alt dosyaları / sayfaları yerleştirmektir

(Örneğin, Customers.php için sobordinate sayfaları isterseniz:

  • Customers.php olarak aynı düzeyde Müşteriler adında bir klasör oluşturun

  • (kod için aşağıya bakınız) klasör için arama sayfasına yönlendirir Müşteriler klasörü içine bir index.php dosyası eklemek

Bu yapı alt klasörlerin birden çok düzeyi için çalışacaktır.

Sadece yukarıda açıklanan dosya yapısını izleyin VE her bir alt klasör içinde gösterilen kodu ile bir index.php dosyası eklemek emin olun.

: Her alt klasör içinde index.php sayfası kodu gibi görünüyor

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Redirected</title>
</head>
<body>
<?php 
$root_dir = "web_root/" ;
$last_dir=array_slice(array_filter(explode('/',$_SERVER['PHP_SELF'])),-2,1,false) ;
$path_to_redirect = "/".$root_dir.$last_dir[0].".php" ; 
header('Location: '.$path_to_redirect) ; 
?>
</body>
</html>

Eğer web root (yani / var / www / html) olarak sunucunun kök dizini kullanırsanız o zaman set $ root_dir = "": (sondaki bırakmayın "in" /). (Yani / var / www / html / web_root ardından set $ root_dir = "web_root /" web siteniz için bir alt kullanırsanız; () web dizini gerçek adı ile web_root replace (/ sondaki dahil emin olun)

Her halükarda, burada benim (türev) kodu:

<?php

// Big Thank You to the folks on StackOverflow
// See http://stackoverflow.com/questions/2594211/php-simple-dynamic-breadcrumb
// Edited to enable using subdirectories to /var/www/html as root
// eg, using /var/www/html/<this folder> as the root directory for this web site
// To enable this, enter the name of the subdirectory being used as web root
// in the $directory2 variable below
// Make sure to include the trailing "/" at the end of the directory name
// eg use      $directory2="this_folder/" ;
// do NOT use  $directory2="this_folder" ;
// If you actually ARE using /var/www/html as the root directory,
// just set $directory2 = "" (blank)
// with NO trailing "/"

// This function will take $_SERVER['REQUEST_URI'] and build a breadcrumb based on the user's current path
function breadcrumbs($separator = ' &raquo; ' , $home = 'Home') 
{

    // This sets the subdirectory as web_root (If you want to use a subdirectory)
    // If you do not use a web_root subdirectory, set $directory2=""; (NO trailing /)
    $directory2 = "web_root/" ;

    // This gets the REQUEST_URI (/path/to/file.php), splits the string (using '/') into an array, and then filters out any empty values
    $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ;
    $path_array = array_filter(explode('/',$path)) ;

    // This line of code accommodates using a subfolder (/var/www/html/<this folder>) as root
    // This removes the first item in the array path so it doesn't repeat
    if ($directory2 != "")
    {
    array_shift($path_array) ;
    }

    // This will build our "base URL" ... Also accounts for HTTPS :)
    $base = ($_SERVER['HTTPS'] ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/'. $directory2 ;

    // Initialize a temporary array with our breadcrumbs. (starting with our home page, which I'm assuming will be the base URL)
    $breadcrumbs = Array("<a href=\"$base\">$home</a>") ;

    // Get the index for the last value in our path array
    $last = end($path_array) ;

    // Initialize the counter
    $crumb_counter = 2 ;

    // Build the rest of the breadcrumbs
    foreach ($path_array as $crumb) 
    {
        // Our "title" is the text that will be displayed representing the filename without the .suffix
        // If there is no "." in the crumb, it is a directory
        if (strpos($crumb,".") == false)
        {
            $title = $crumb ;
        }
        else
        {
            $title = substr($crumb,0,strpos($crumb,".")) ;
        }

        // If we are not on the last index, then create a hyperlink
        if ($crumb != $last)
        {
            $calling_page_array = array_slice(array_values(array_filter(explode('/',$path))),0,$crumb_counter,false) ;
            $calling_page_path = "/".implode('/',$calling_page_array).".php" ;
            $breadcrumbs[] = "<a href=".$calling_page_path.">".$title."</a>" ;
        }

        // Otherwise, just display the title
        else
        {
            $breadcrumbs[] = $title ;
        }

        $crumb_counter = $crumb_counter + 1 ;

    }
    // Build our temporary array (pieces of bread) into one big string :)
    return implode($separator, $breadcrumbs) ;
}

// <p><?= breadcrumbs() ? ></p>
// <p><?= breadcrumbs(' > ') ? ></p>
// <p><?= breadcrumbs(' ^^ ', 'Index') ? ></p>
?>

İşte büyük bir basit dinamik bir kırıntı (gerektiği gibi çimdik) 'dir:

    <?php 
    $docroot = "/zen/index5.php";
    $path =($_SERVER['REQUEST_URI']);
    $names = explode("/", $path); 
    $trimnames = array_slice($names, 1, -1);
    $length = count($trimnames)-1;
    $fixme = array(".php","-","myname");
    $fixes = array(""," ","My<strong>Name</strong>");
    echo '<div id="breadwrap"><ol id="breadcrumb">';
    $url = "";
    for ($i = 0; $i <= $length;$i++){
    $url .= $trimnames[$i]."/";
        if($i>0 && $i!=$length){
            echo '<li><a href="/'.$url.'">'.ucfirst(str_replace($fixme,$fixes,$trimnames[$i]) . ' ').'</a></li>';
    }
    elseif ($i == $length){
        echo '<li class="current">'.ucfirst(str_replace($fixme,$fixes,$trimnames[$i]) . ' ').'</li>';       
    }
    else{
        echo $trimnames[$i]='<li><a href='.$docroot.' id="bread-home"><span>&nbsp;</span></a></li>';
    }
}
echo '</ol>';
?>