<iframe> вместо включения - PullRequest
       12

<iframe> вместо включения

3 голосов
/ 08 апреля 2011

Я хочу включить несколько разделов комментариев на одной странице, используя скрипт Commentics php.Сначала я попытался выполнить это, используя include примерно так:

<div id="1">  
    <?php  
    include "comments_id1.php";  
    ?>  
</div>  
<div id="2">  
    <?php  
    include "comments_id2.php";  
    ?>  
</div>

comments_id1.php:

<?php 
session_start(); 
ob_start();
?>
[...]
<?php 
$page_id = "1"; 
$reference = "Page One"; 
$path_to_comments_folder = "comments/"; 
define ('IN_COMMENTICS', 'true');
require $path_to_comments_folder . "includes/commentics.php";
?>

(comments_id2.php соответственно: $page_id = "2"; $reference = "Page Two")

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

Итак, решение, которое я придумал, заключалось в использовании тега <iframe>, например:

<div id="1">  
    <iframe width="100%" src="comments_id1.php"></iframe> 
</div>  
<div id="2">  
    <iframe width="100%" src="comments_id2.php"></iframe>  
</div>

Теперь вот мой вопрос: действительно ли это правильное решение, которое кто-либо порекомендует??И если так, есть ли какие-либо серьезные последствия (помимо поисковых систем), использующие <iframe> для этой цели?Если это не тот путь, какие-либо предложения?

Спасибо!

Ответы [ 5 ]

3 голосов
/ 08 апреля 2011

Лично я очень ненавижу IFRAME по майским причинам, поэтому я рекомендую держаться от них подальше.

Вы прочитали Руководство по интеграции ?

Кажется, вы должны поставить

<?php
    session_start();
    ob_start();
?>

в начале пэга и

<?php
    $page_id = "1";
    $reference = "Page One";
    $path_to_comments_folder = "comments/";
    define ('IN_COMMENTICS', 'true'); //no need to edit this line
    require $path_to_comments_folder . "includes/commentics.php"; //no need to edit this line
?>

где вы хотите, чтобы ваши комментарии. Также имеется расширенное руководство по интеграции .

1 голос
/ 08 апреля 2011

Еще одним следствием использования iframes является то, что рендеринг может быть не в порядке, поскольку это независимый HTTP-запрос, и, поскольку это дополнительный запрос, это может увеличить общее время поиска данных, особенно в IE.версии до 8, где они были ограничены 2 одновременными HTTP-запросами одновременно - поэтому, если у вас одновременно загружаются изображения или другие сценарии, некоторые из них могут быть поставлены в очередь до тех пор, пока один или оба из этих двух слотов не освободятся.IE8 (и Firefox) увеличили это значение до 6.

Хотя кажется, что реальным решением является их исправление скрипта Commentics или поиск другой библиотеки, несмотря на все советы, которые вы, вероятно, найдете здесь наоборот (хотяпо веским причинам, конечно), для начинающих я рекомендую сосредоточиться на практичности и экспериментах, а не на догмах;другими словами, это может сработать для вас, если в фреймах нет ссылок, которые, если щелкнуть по ним, приведут только к замене фрейма контентом.Хотя это и не рекомендуется, по причинам, о которых я и другие упоминали.

Другая проблема, на которую следует обратить внимание, заключается в том, что даже малейший пробел перед вашим началом <?php интерпретируется как текст, отправляемый пользователю, так что еслиinclude пытается добавить заголовки, у вас могут возникнуть проблемы.Сообщение о том, что заголовки уже отправлены, означает, что скрипт начал отправлять заголовки, поскольку ему нужно было отправить их перед началом отправки содержимого (в данном случае, пробела), которое вы уже начали печатать (без буферизации).

Для PHP я действительно рекомендую шаблонизатор, такой как Smarty (и Smarty хорошо документирован), где вы освоитесь с шаблоном, позволяющим сначала запустить вашу бизнес-логику, а затем предоставьте переменные для логики проектирования для использования там (в настоящее время это вашеHTML + включает в себя).Когда вы включаете другие библиотеки, которые выводят текст, вам все равно придется использовать буферизацию по тем причинам, которые вы обнаружили.

1 голос
/ 08 апреля 2011

Я не знаком со сценарием, который вы используете, но у фреймов есть некоторые существенные недостатки. Некоторые недостатки этого подхода могут быть:

  • Для фреймов требуется их ширина и высота, определенные в теге HTML. Если размеры внутри Iframe отличаются (например, из-за более длинного, чем обычно, комментария), вы получите дополнительные наборы полос прокрутки.
  • Использование памяти и время рендеринга iframes высоки, особенно в старых версиях Internet Explorer

Чтобы избежать предупреждений «Невозможно изменить информацию заголовка», вы можете включить буферизацию вывода в PHP или посмотреть, какие заголовки фактически использует отправляемый вами скрипт. Может быть, они не нужны?

1 голос
/ 08 апреля 2011

я бы не использовал iframes…

, чтобы обойти проблему заголовков, вы можете буферизовать вывод (заголовки могут быть отправлены только перед фактическим содержимым), а затем отправлять все сразу:

ob_start();
// your code with includes
ob_end_flush();
0 голосов
/ 25 июня 2013

Просто удалите:

<?php
    session_start();
    ob_start();
?>

из comments_id1.php

Это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...