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

Заранее спасибо
Решения И.
12 сообщений
#16 лет назад
Iframe
Сергей Н.
183 сообщения
#16 лет назад
Старый метод:

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


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

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

P.S. Если возможно, лучше через базу
Иван Ш.
4 сообщения
#16 лет назад
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 сообщений
#16 лет назад

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


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



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


Но это примитивно
Станислав Малкин
1410 сообщений
#16 лет назад
Ребята, о чем вы вообще? Человеку нужна подрузка информации без перезагрузки страницы. Зачем вы ему предлагаете способ построения проекта, когда он совсем об этом не спрашивал? Перечитайте его первое сообщение. Человеку НУЖНО подгружать контент без ПЕРЕЗАГРУЗКИ страницы в целом и без использования JS/Flash/ActiveX
Вадим С.
18 сообщений
#16 лет назад
Учитывая то, что в тексте поста нет ни слова о "БЕЗ ПЕРЕЗАГРУЗКИ СТРАНИЦЫ", и приведены ограничения вроде "нельзя создавать множество 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 сообщений
#16 лет назад
slang, нет, не все. Человек первым же ответом посоветовал iframe. Следует наверное ждать автора, чтобы было понятнее о чем речь.

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

И как это реализовывается, если не секрет?
Николай С.
710 сообщений
#16 лет назад

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

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

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

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