Bir web sitesinin tüm sayfalar arasında bir HTML saplama eklemek için PHP include nasıl kullanılır

2 Cevap php

Ben basit bir web sitesi geliştiriyorum. Bu 20 sayfa yakın olacaktır. Bu 3 seviyeli hiyerarşi vardır.

Home
MenuStub
   Category1
      Page1
      Page2
   Category2
      Page1
      Page2
   ....
      ....
      ....

The main navigation will have 4 - 5 items representing each 'category' This will be constant for all the pages. I am not even planning to highlight the current category or anything.

Previously I decided to put the menu HTML stub alone in a separate file and use PHP include to include it in all pages.

But, relative paths might be frustrating. Assume that the menu stub file is located at the root directory.

Yani, kök düzey sayfalarında, php gibi okuyacak dahil

include "menustub.html";

ikinci düzey sayfalarında, o demeliyim

include "../menustub.html";

ve üçüncü düzey sayfalar, bu demeliyim

include "../../menustub.html";

First, is this the best way to include a single file across all pages in a website?

Second, if the website grows big, and many more levels are added, maintaining this will be a problem. If I suddenly decide to move an entire set of pages one (or several) levels up or down, I should manually go and change the relative paths in each file.

Am I missing something here? Is there a universal way to point to a particular file, that every page will understand, regardless of where it is located?

What is the best way to have a stub and include it in all the pages without having these maintenance nightmares?

2 Cevap

Bu indeks dosya tüm dahil yapmak için çok daha dinamik olabilir ve dahil edileceği sayfa, onu anlatmak için GET parametreleri kullanabilirsiniz.

Örneğin, bu gibi bir dizin yapısı göz önünde bulundurun:

/
  index.php
  /ui
    header.html
    menu.html
    footer.html
    Cat1/
      Page1.html
      Page2.html
    Cat2/
      Page3.html
      Page4.html

Her zaman görmek istedim kategori ve sayfanın adı dahil, dizin dosyayı aramak için olsaydı, gibi: index.php?category=Cat1&page=Page1, böyle bir şey yapabilirsiniz:

<?php
// Include a header and a menu, defined in their own HTML files.
include('ui/header.html');
include('ui/menu.html');

// Set up a list of valid categories and their sub pages.
$pages = array(
    'Cat1' => array(
        'Page1',
        'Page2'
    ),
    'Cat2' => array(
        'Page3',
        'Page4'
    )
);

// Find the category and page to use.
if(isset($_GET['category'], $pages[$_GET['category']])) {
    $category = $_GET['category'];
} else {
    $category = 'Cat1';
}
if(isset($_GET['page'], $pages[$category][$_GET['page']])) {
    $page = $_GET['page'];
} else {
    $page = 'Page1';
}

// Include the selected content page.
include("ui/{$category}/{$page}.html");

// Include a footer
include('ui/footer.html');
?>

Eğer sizin her yeni dosya içerir tekrarlamak zorunda kalmadan kadar derin ve istediğiniz gibi içeriği genişletmek Bu şekilde.

Bu sorunu çözmek için ortak yollar include_path kullanarak ya da şudur: config'de yolunu eklemek için bu tür dosyaları ile dir ekleyin ve sadece yapabilirsiniz

include "menustub.html";

from anywhere. See http://se2.php.net/manual/en/ini.core.php#ini.include-path It can be set from php.ini and in code. Not sure if it can be set in .htaccess files

Başka bir yolu da kök dizin değişkeni ayarlamak ve her zaman kullanmak için:

include "{$rootDir}/menustub.html";

Gördüğünüz http://se2.php.net/manual/en/ini.core.php (auto_prepend_file), her zaman ekleme veya bir dosyayı başa eklemek için php söylemek anlamına gelir otomatik ekleme / prepend kullanma seçeneği de var

$ Rootdir ya yapılandırmasından ayarlamak veya otomatik $ _SERVER ['DOCUMENT_ROOT'] kullanılarak yapılabilir. Dosyaları tek webapp dizin strucure altında bulunan varsa kolaylık için (çeşitli web uygulamaları arasında paylaşılan) paylaşılan dosyaları, ikincisi için kullanmak eğer eski iyidir.