Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2009, 19:17   #1
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию Проблема со вставкой HTML кода через include

Здраствуйте !!
Я первый раз создаю сайт с нуля и решил, что обойдусь без особых знаний php. Но когда у меня получилось около 60 HTML страниц, и что при небольшом изменении дизайна на одной из страниц, мне приходится копировать код с этим изменением на все 60 стр., я понял что надо как-то использовать скрипты )

Ну я решил, каждый элемент дизайна (повторяющегося на всех страницах) у меня будет в отдельном текстовом файле. Например (head.txt - шапка сайта, menu - меню - сайта, и т.д.).

вот php файл (head.php), который открывает файл head.txt с кодом html для чтения и считывает оттуда всё содержимое:

Код:
<?php
$rcol="design/head.txt";
$open=fopen($rcol, "r");
$read=fread($open, filesize($rcol));
fclose($open);
echo $read;
?>
Вот содержимое самого файла head.txt:

Код:
<table border="0" align="center" cellspacing="0" cellpadding="0" width="1000">
  <tr>
    <td height="169" id="head" colspan="2" align="left" valign="top"><table width="1000" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="32">&nbsp;</td>
        <td width="968" height="168"><p><a href="index.html"><img src="images/logo.png" alt="Логотип" width="312" height="109" border="0"/></a></p></td>
      </tr>
      <tr>
        <td height="3" colspan="2" valign="bottom"><img src="images/hr.GIF" width="1000" height="3" /></td>
        </tr>
    </table></td>
  </tr>
  </table>
И наконец вот часть HTML кода самой страницы, где я подключаю файл head.php:

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Фаберлик. О компании</title>
<link href="SpryAssets/main.css" rel="stylesheet" type="text/css" />
<script src="SpryAssets/SpryMenuBar.js" type="text/javascript"></script>
<link href="SpryAssets/SpryMenuBarHorizontal.css" rel="stylesheet" type="text/css" />
<link href="SpryAssets/SpryMenuBarVertical.css" rel="stylesheet" type="text/css" />
</head>
<body id="mbody" leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0" marginheight="0" marginwidth="0">
<table class="maintable" cellspacing="1,9" align="center">
<tr><td>
<?php include "design/head.php"; echo $read; ?>
В результате таблица с логотипом и фоном, которая должна вывестись на экран, немного съезжает вниз, оставляя черную полосу сверху:



А если этот же подключаемый код выводить просто при помощи "echo", то всё правильно отображается:

Код:
<?php echo "<table border='0' align='center' cellspacing='0' cellpadding='0' width='1000'>
  <tr>
    <td height='169' id='head' colspan='2' align='left' valign='top'><table width='1000' border='0' cellpadding='0' cellspacing='0'>
      <tr>
        <td width='32'>&nbsp;</td>
        <td width='968' height='168'><p><a href='index.html'><img src='images/logo.png' alt='Логотип' width='312' height='109' border='0'/></a></p></td>
      </tr>
      <tr>
        <td height='3' colspan='2' valign='bottom'><img src='images/hr.GIF' width='1000' height='3' /></td>
        </tr>
    </table></td>
  </tr>
  </table>"; ?>
И вот правильное отображение:




Подскажите, может функция fread что-то добавляет сверху и от этого всё съезжает ?
POPOV вне форума Ответить с цитированием
Старый 22.08.2009, 19:23   #2
Metandrostenalon
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 108
По умолчанию

зачем вы 2 раза выводите шапку? вы можете открыть исходный код, после того как сгенерирована страница и найти ошибку

возможно вас заинтересует функция file_get_contents()
php,javascript
Metandrostenalon вне форума Ответить с цитированием
Старый 22.08.2009, 19:48   #3
Jensi
beneto.ru
Форумчанин
 
Регистрация: 09.03.2009
Сообщений: 174
Смех

А если так:
http://www.php.su/learnphp/cs/?ic
http://us.php.net/manual/en/function.include.php
Да и зачем так грузить сервер всякой ***** ? Делается так:
Создай папку templates (шаблоны) и помести туда файлы (Например, header.php , left_table.php, right_table.php, footer.php) и прям в них пиши нужное, а потом в файлы вставь такое:
Код:
<?
include("templates/header.php");
include("templates/left_table.php");
include("templates/right_table.php");
include("templates/footer.php");
?>
И не нужно считывать файлы или вставлять код два раза и т.д.
Подробнее в мануалах...
Jensi вне форума Ответить с цитированием
Старый 22.08.2009, 20:49   #4
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Metandrostenalon
Извиняюсь, это я случайно когда пробовал разные варианты вставки забыл убрать из файла head.php строку echo "$read"; ) Почитаю про file_get_contents, если там конечно не сильно сложно, а время нет, сайт запускать через недельку надо.

Jensi
А, функция "include" получается может просто вывести содержимое любого файла ? Я думал, с помощью неё можно только подключить файл .php для обработки. )) Спасибо ! А два раза вывел шапку по ошибке и сюда старый код направил, выше описал..

Немного погодя :

Прочитал что вроде для вставки кусков Html страниц лучше использовать "require". Я прав или нет ?

Последний раз редактировалось POPOV; 22.08.2009 в 21:08.
POPOV вне форума Ответить с цитированием
Старый 22.08.2009, 23:34   #5
Jensi
beneto.ru
Форумчанин
 
Регистрация: 09.03.2009
Сообщений: 174
По умолчанию

Цитата:
А, функция "include" получается может просто вывести содержимое любого файла ?
Да, прямо весь файл выводит
Ну на том сайте же всё написано:
Цитата:
Конструкция require позволяет включать файлы в сценарий PHP до исполнения сценария PHP
конструкция require позволяет собирать сценарии PHP из нескольких отдельных файлов, которые могут быть как html-страницами, так и php-скриптами.
Цитата:
Конструкция include также предназначена для включения файлов в код сценария PHP.
В отличие от конструкции require конструкция include позволяет включать файлы в код PHP скрипта во время выполнения сценария
Читаем: http://www.php.su/learnphp/cs/?ic , там есть ответы на все вопросы
Jensi вне форума Ответить с цитированием
Старый 23.08.2009, 00:50   #6
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Добавлю.
Удобно создать отдельные файлы(по тематике например) с кучей функций внутри. Например: func_html.php - здесь куски разметки страницы можно хранить, func_bd.php - здесь различные функции при обращении к базам данных и т.д.. Потом "приинклудить" нужный файл и вызывать нужные функции.
Простой пример:
файл с функцией внутри:
Код:
<?php
  function inc_fun()
  {
    echo 'Hello World!!!!!';
  }
  ?>
вызов функции там где нужно:
Код:
<?php
.......
require_once ('param.php');
// дальше можно вызывать все функции которые находятся в param.php в обычном порядке
inc_fun();
........
?>
вместо echo 'Hello World!!!!!'; может быть любой корректный код (не только РНР), любой длины.
Если файлов с различным набором функций достаточно много (например больше трех) то, что бы не писать
Код:
require_once ('param1.php');
require_once ('param2.php');
require_once ('param3.php');
…
В каждом файле где нужна та или иная функция, можно создать файл контейнер в котором будут инклудится все эти файлы:
<?php
// Этот файл можно включать во все остальные файлы, в результате каждый из файлов будет
//содержать весь набор необходимых функций
require_once('param1.php');
require_once ('param2.php');
require_once ('param3.php');
?>
Gorychev вне форума Ответить с цитированием
Старый 23.08.2009, 01:06   #7
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Еще добавлю.
Файлам которые инслудятся можно дать любое расширение например *.ink, это не самый лучший вариант с точки зрения безопасности, т.к. если каким либо образом узнать имя такого файла, то введя в адресной строке путь к нему можно будет увидеть его содержание. Самый простой способ который воспрепятствует этому – это хранить подобные файлы с расширением *.php.
Есть и др. способы, но это самый простой и достаточно эффективный.
Gorychev вне форума Ответить с цитированием
Старый 23.08.2009, 23:28   #8
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Gorychev
Да, спасибо большое за советы, но у меня видимо проблема может быть в html коде самом...

Jensi
Попробовал как вы советовали, создал папку templates, поместил туда файл head.php с html кодом шапки сайта:

Код:
<table border="0" align="center" cellspacing="0" cellpadding="0" width="1000">
  <tr>
    <td height="169" id="head" colspan="2" align="left" valign="top"><table width="1000" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="32">&nbsp;</td>
        <td width="968" height="168"><p><a href="index.html"><img src="images/logo.png" alt="Логотип" width="312" height="109" border="0"/></a></p></td>
      </tr>
      <tr>
        <td height="3" colspan="2" valign="bottom"><img src="images/hr.GIF" width="1000" height="3" /></td>
        </tr>
    </table></td>
  </tr>
  </table>
При просмотре в браузере шапка съезжает примерно на сантиметр вниз и появляется и на том месте черная полоса. (как я показал на скрине в 1-м посте). Вот так вызываю файл: <?php include "templates/head.php"; ?>.
Почему-то если html код подключаю просто через echo "<table>......."
то всё правильно отображается.

При просмотре в Dreamweaver в режиме Design всё отображается как и должно быть, но в браузере нет. Чёрный фон у меня только под полосой с меню. Незнаю, куда мне обратиться.. Сюда же не выложишь весь код страницы чтобы выяснили причину, да и не по теме это.
POPOV вне форума Ответить с цитированием
Старый 24.08.2009, 01:51   #9
Jensi
beneto.ru
Форумчанин
 
Регистрация: 09.03.2009
Сообщений: 174
Радость

Цитата:
но в браузере нет
Какой браузер? Нужно смотреть сайт в нескольких браузерах
Как вариант, как только страница загрузилась, посмотри исходный код в браузере и найди то место, где этот отступ сидит и узнаешь причину
Цитата:
Почему-то если html код подключаю просто через echo "<table>......."
А если там будет ещё и php-код? Что будешь делать?)))) Вывод там не нужен. Можно ещё попробовать инклудить любой другой код, а не табличку, например, надпись "666" и узнать, что будет...
Немного оффтопа:
Код:
width="1000"
О_о, width="100%" для кроссбраузерности
Нужно всегда/почти всегда использовать проценты, т.к. разрешения экрана разное бывает, у тебя будет всё хорошо отображаться, а у другого человека ужОс будет
Jensi вне форума Ответить с цитированием
Старый 24.08.2009, 21:59   #10
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Цитата:
Сообщение от Jensi Посмотреть сообщение
Какой браузер? Нужно смотреть сайт в нескольких браузерах
Как вариант, как только страница загрузилась, посмотри исходный код в браузере и найди то место, где этот отступ сидит и узнаешь причину
Да браузеров несколько стоит, правильно отображается только в Netscape Navigator. в FireFox, Explorer 8, Opera 9 всё одинаково.
Про исходный код как я понял это "просмотр html кода страницы" ? А что там поменяться может ? ничё нового не добавлено, код в подключаемом файле верный, так как если я его в место include ставлю, всё правильно отображается.

Цитата:
Сообщение от Jensi Посмотреть сообщение
А если там будет ещё и php-код? Что будешь делать?)))) Вывод там не нужен. Можно ещё попробовать инклудить любой другой код, а не табличку, например, надпись "666" и узнать, что будет...
Немного оффтопа:
Код:
width="1000"
О_о, width="100%" для кроссбраузерности
Нужно всегда/почти всегда использовать проценты, т.к. разрешения экрана разное бывает, у тебя будет всё хорошо отображаться, а у другого человека ужОс будет
Я когда незнал почти ничё о HTML, а нужно было делать сайт, купил сдуру шаблон. Там кстати все значения были в пикселах. Правда всё равно пришлось поучить HTML и переделать всё до неузнаваемости. Ну вот у меня на 1440х900 на ноутбуке сайт правильно выглядит на всех браузерах, на 1024х768 - правильно, на 1280х1024 - тоже правильно, тока на 800х600 приходится страницу чуть вправо прокручивать )). А почему там вывод не нужен ? Шапку я правда только для примера подключил, а на самом деле такая байда при выводе любой части сайта через include.

Это чё мне нужно все таблицы в процентах ставить ? И почему 100% обязательно ? Я ставлю 100%, а у меня ну у меня сайт на весь экран растягивается, а при сужении страницы как обычно появляется полоса прокрутки вправо-влево.

Щас попробую 666 приинклудить.. )

Немного позже... :

Ну вывел в левый вехрний угол сайта надпись 666 )).

Вот:


Опять полоса, тока не чёрная, так как по картинкой с логотипом и горами, фон какраз желтоватый. А полоска вроде такой же высоты. Чёрный фон у меня только под меню на JavaScript, но как он может оказаться сверху ??)

Последний раз редактировалось POPOV; 24.08.2009 в 22:18.
POPOV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Studio 2008. Проблема с асм вставкой в код на С++ LexiusUA Visual C++ 22 25.03.2009 03:31
Получение HTML - кода??? PashaXP Win Api 9 05.08.2008 15:27
оптимиация Html кода Hallo HTML и CSS 18 06.12.2007 20:27
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51
include проблема (redefine error) MS VS 2005 CyberM Общие вопросы C/C++ 1 29.06.2007 16:30