Антон Березин
1 повідомлення
#17 років тому
Есть страница index.php со всеми необходимыми included менюшками, хидером и футером. Также есть контент в отдельных текстовых файлах (статьи). Необходимо сделать так, чтоб при нажатии на определённую ссылку в меню, подгружался контент из определённого файла. Т.е. эффект должен быть как при использовании фрэймов. Как это сделать если:
- нельзя использовать client-side scripting
- нельзя создавать множество php файлов с подгружением меню и других шаблонов к ним
- вся генерация должна происходить через index.php

Заранее спасибо
Решения И.
12 повідомлень
#17 років тому
Iframe
Сергей Н.
183 повідомлення
#17 років тому
Старый метод:

шапка
<?php
include "inc/".$content.".html";
?>
ноги


Ну и вызывать контент ссылкой /index.php?content=about

Этот скрипт я слишком упростил. Чтобы применять, нужно его обезопасить

P.S. Если возможно, лучше через базу
Иван Ш.
4 повідомлення
#17 років тому
Index.php
<?
include ("class.php"); #файл с классом Template
include ("inc/common.php"); #здесь обработка всякой гадости для построения страницы


$tpl = & new Template();

$tpl->set('title',$title);
$tpl->set('content',$content);
$main_content = $tpl->fetch("tpl/index.tpl");
echo $main_content;
?>


class.php

<?
class Template {

var $vars;

function Template($file = null) {
$this->file = $file;
$this->vars = '';
}

function set($name, $value) {
$this->vars = is_object($value) ? $value->fetch() : $value;
}

function fetch($file = null) {
if(!$file) $file = $this->file;

extract($this->vars);
ob_start();
include($file);
$contents = ob_get_contents();
ob_end_clean();
return $contents;
}
}
?>

вот собственна простая системка с шаблонами.. думаю разберетесь.. если нет - стучите в асю 198-363-971
Алексей Б.
897 повідомлень
#17 років тому

<?
$pg = $_GET;
switch($pg)
{
case 'page1':
include 'page1.txt';
break;
case 'page2'
include 'page2.txt';
break;
default:
include 'index.txt';
break;
}
?>


А Ap6y3а расстрелять за такие методы.
Сергей Н.
183 повідомлення
#17 років тому
lyoxa, я самый примитив показал
Вадим С.
18 повідомлень
#17 років тому
Всё верно пишет господин Ap6y3, только нужно от локал пхп инклюдов защититься, а Вы, lyoxa, будете 5000 кейсов ручками писать, например, для каталога товаров, или хотя бы для многостраничного сайта? Не учите начинающего глупостям, лучше бы в опастность инклюда ткнули, и защититься научили...
Андрей Д.
1267 повідомлень
#17 років тому
Сейчас прямо в поле ввода топика напишу код) не судите строго) опечаток будет мнооого)



$need = $_GET;
$pages = array("main", "news");
if(in_array($pages, $need)) include_once "inc/".$need.".php";


Но это примитивно
Станислав Малкин
1410 повідомлень
#17 років тому
Ребята, о чем вы вообще? Человеку нужна подрузка информации без перезагрузки страницы. Зачем вы ему предлагаете способ построения проекта, когда он совсем об этом не спрашивал? Перечитайте его первое сообщение. Человеку НУЖНО подгружать контент без ПЕРЕЗАГРУЗКИ страницы в целом и без использования JS/Flash/ActiveX
Вадим С.
18 повідомлень
#17 років тому
Учитывая то, что в тексте поста нет ни слова о "БЕЗ ПЕРЕЗАГРУЗКИ СТРАНИЦЫ", и приведены ограничения вроде "нельзя создавать множество php файлов с подгружением меню и других шаблонов к ним" (видимо как одно из решений), а также, обращая внимание на то, что речь идёт о "вся генерация должна происходить через index.php", то, смею полагать, что перечитать первый пост стоит Вам, уважаемый ArtLab. Хотя, думаю, лучше чем сам автор никто не объяснит сути вопроса, который, кроме Вас, все поняли однотипно.
Касательно кода, я бы примитивно его реализовал в более общем случае, дабы не перечислять все доступные имена страниц, и дать возможность немного побаловаться в ручном наборе:

if(eregi("(+)", $_GET, $inc)) if(!include("inc/".$inc.".html") include("inc/404.html");
else header("Location:index.php");

И собсно вызов:

index.php?inc=about
Станислав Малкин
1410 повідомлень
#17 років тому
slang, нет, не все. Человек первым же ответом посоветовал iframe. Следует наверное ждать автора, чтобы было понятнее о чем речь.

К тому же было написано Т.е. эффект должен быть как при использовании фрэймов. Это уже говорит о том, что без перезагрузки всей страницы.
Вадим С.
18 повідомлень
#17 років тому
Речь идёт о ГЕНЕРАЦИИ, какая может быть ещё генерация одним файлом пхп? А эффект от описанного будет именно как от фреймов, благодаря одинаковым меню и шапке с подвалом, сидящим в кеше и загружающимся молниеносно, в отличии от контента. В любом случае, я считаю спор беспредметным, ответы даны, придёт автор, прояснит ситуацию...
Алексей Б.
897 повідомлень
#17 років тому
slang, вечный редирект при индексе без параметров и раскрытие пути при не существующем inc/bla-bla.
(к стенке)
Николай С.
710 повідомлень
#17 років тому
Цитата ("ArtLab"):
Человеку НУЖНО подгружать контент без ПЕРЕЗАГРУЗКИ страницы в целом и без использования JS/Flash/ActiveX

И как это реализовывается, если не секрет?
Николай С.
710 повідомлень
#17 років тому

if(basename($_GET) == '')
{
header("Location:index.php");
}
else
{
include(basename($_GET));
}
Михаил В.
2195 повідомлень
#17 років тому
Автор давно уже пропал, а вы стараетесь.
Станислав Малкин
1410 повідомлень
#17 років тому
SolNikolay, я не знаю, как это сделать, без перезагрузки, кроме как через iframe, поэтому ничего и не подсказывал.
Андрей Д.
1267 повідомлень
#17 років тому
Автору нужно хз что, я тоже сразу подумал о Ajax'e.
Потом увидел что люди пишут о инклудах и подумал, что они знают то, что не знаю я =)))

Автору нужно юзать Ajax библиотеки, а в пхп файле выводить только изменённую часть...
Вадим С.
18 повідомлень
#17 років тому
lyoxa, проще вставить подавление на инклюд, и лишнюю проверку на формат ввода, или заменить редирект инклюдом индекса, чем писать простыню кейсов, разве Вы так не считаете?
Например так, это уже если уходить от спонтанных примеров, рождённых в поле ввода сообщения, к тем, которые служат не пояснять, а работать:

if(eregi("(+)", $_GET, $inc)){
if(!@include("inc/".$inc.".html")) include("inc/404.html");
}else include("inc/index.html");

Ну же, автор, появись, все уже жаждят ответа, что ты имел ввиду 8)