Каков наилучший способ включить панель навигации на всех страницах? - PullRequest
2 голосов
/ 18 февраля 2012

Я думаю, как добавить панели навигации ко всем моим веб-страницам, и когда я обновляю файл, все страницы также должны обновляться.
Некоторое время я исследовал в Google, что я нашел:

  •  PHP 
  •  SSI  (я даже не знаю, что это)
  •  JavaScript 

Но какой из них лучший? А может кто-нибудь объяснить, что такое SSI? 1016 *

Ответы [ 5 ]

2 голосов
/ 18 февраля 2012

SSI (включая серверную часть) устарели. Я бы предложил не использовать их. JavaScript будет работать, но ваш браузер должен будет загрузить дополнительный файл только для того, чтобы создать страницу. Кроме того, люди с отключенным JavaScript не смогут перемещаться по вашему сайту. На самом деле не имеет смысла использовать JavaScript для создания своей страницы, поэтому не используйте его, если не хотите специальных эффектов.

PHP - лучший вариант. Вам просто нужно включить навигационный скрипт вверху страницы, например include_once('nav.php');.

1 голос
/ 18 февраля 2012

PHP

PHP будет работать нормально, но его использование будет означать, что вам придется настроить его немного по-другому, в том числе выполнить следующие действия:

  • Запуск PHP на вашемсервер
  • Переименование ваших .html файлов в .php
  • Изменение ссылок на файлы .php
  • Изучение хотя бы достаточного количества PHP для использования require

SSI

SSI (включая сторону сервера) - это древняя вещь, которую никто не использует.Не используйте их.Но если вам интересно, взгляните на mod_include .

Javascript

Клиентский javascript может работать, но вам лучшеделать такие вещи на сервере.


Вот еще несколько вариантов, которые следует рассмотреть.

Другой язык на стороне сервера

PHP - не единственный серверязыкВы можете предпочесть python, ruby, серверный javascript и т. Д.

XSLT

Преобразования XSL хорошо подходят для этого вида шаблонов и могут применяться либо браузером, либосервер.Поддержка хороша во всех браузерах, и была в течение некоторого времени.Такие расширения, как «noscript», как правило, нарушают XSL-преобразования в некоторых браузерах, поэтому их применение на сервере обычно предпочтительнее, когда это возможно.

iframe hack

Вы можете просто поместить навигацию в отдельный файл HTML и включить ее в iframe на каждой странице.Используйте это только в крайнем случае.Если вы не можете использовать серверный язык, не можете или не хотите использовать XSLT, и у вас относительно мало страниц, это может работать нормально.В противном случае не делайте этого.

1 голос
/ 18 февраля 2012

But which one is the best Это зависит от того, что вы уже используете на своем сайте.

Если написано на php, то для включения лучше использовать php. Простым include('file_with_nav_bars_code'); в нужном месте вашего шаблона или кода вы можете вставить статический HTML-код или сгенерированный код с помощью файла, упомянутого выше.

SSI (в том числе на стороне сервера) подходит для «статических» страниц. Это похоже на простой сценарий, который может быть выполнен сервером после некоторой настройки. Если вы проверите шаблоны страниц ошибок сервера Apache, вы увидите там директивы SSI, которые включают нижний колонтитул, заголовок, выводят некоторую основную информацию, такую ​​как время, запрошенный URL и т. Д. Включение некоторого кода будет выглядеть как <!--#include virtual="/file_with_nav_bars_code" -->, и таким же образом вы могли бы включить даже некоторый скрипт CGI <!--#exec cgi="/cgi-bin/example.cgi" --> Подробнее здесь http://httpd.apache.org/docs/2.0/howto/ssi.html и здесь http://en.wikipedia.org/wiki/Server_Side_Includes

Javascript также хорош для статических страниц. Вы должны загрузить код JavaScript, который «сгенерирует» нужный HTML-код, и вывести его в нужное место на странице. Это имеет один серьезный негативный эффект - поисковые системы не смогут переходить по ссылкам, сгенерированным js, поскольку они не будут его запускать (поскольку посетители с отключенным js отключены, но я не знаю таких случаев. Даже Opera mini умеет отображать результаты простого вывода js). Простой способ - включить скрипт js в то место, где вы хотите разместить панель навигации: <script src='nav_bar.js'></script> и в nav_bar.js вы (в очень простом примере) будете выглядеть примерно так: document.write('some html code of the bar here, with escaped new lines and quotes');

ps: За многие годы опыта я перепробовал их все :) Я использовал js и SSI для ранних статических страниц, теперь я использую только php и другие серверные скриптовые языки. Вы все еще можете использовать javascript с страницами, сгенерированными php, но для SSI вы должны указать веб-серверу еще раз передать вывод php в поисках директивы SSI, а не возвращать ее обратно в браузер.

0 голосов
/ 30 июня 2017

SSI по-прежнему работает на современных серверах с использованием функции v или% (протестировано на Apache / 2.4.18).

Пример (включая nav):

<!--#include file="nav.html" -->

Пример активного пункта меню (при проверке имени документа):

<!--#if expr='v("DOCUMENT_NAME")=~/about.html/'-->
<a class="active" href="#">
<!--#else -->
<a href="about.html">
<!--#endif -->
About</a>

Пример 2 (если проверка на пути к документу):

<!--#if expr="%{DOCUMENT_URI} =~ /product/"-->
Product path
<!--#else-->
Some other path
<!--#endif-->

.htaccess, чтобы заставить работать SSI (пример):

AddType text/html .shtml
AddHandler server-parsed .html
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes

Старая версия Apache использует другой синтаксис expr.

0 голосов
/ 18 февраля 2012

SSI означает «Включение на стороне сервера», что означает, что все ваши файлы будут включать в себя один и тот же файл (например, для панели навигации), поэтому, когда вы вносите какие-либо изменения в этот файл, он 'Отразится на всех ваших страницах.

PHP и javascript - это две разные вещи, PHP - это язык на стороне сервера, а javascript - это язык на стороне клиента.

Если вам нужна навигациябар, PHP будет достаточно.Но если вы хотите добавить какие-либо функциональные возможности на стороне клиента, такие как всплывающее меню в разделах и тому подобное, вам придется использовать и JavaScript.

...