Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Отображение нескольких страниц на одной


Автор: Drizhenko 26.2.2006, 06:19
Подскажите, пожалуйста. Имеется меню в левой части главной странице. Как сделать, чтобы при выборе пункта меню открывалась не новая страница, а в главной странице, в определенном месте отображалась новая, соответствующая пункту меню. Что-то типа frame в html.

Автор: Guedda 26.2.2006, 08:42
Это и есть frames в html...
Пользуйся ими...

Автор: Drizhenko 26.2.2006, 09:26
Может я чего-то не понимаю, но frame мне не подходит так как при большом содержимом меню на фрейме появляется дополнительный скрулбар. А мне нужно, что бы интегрированные страниццы били с основной страницей одним целым.

Автор: Serkys 26.2.2006, 10:37
Это всё можно отключить параметрами фрейма. Почитай про фреймы поподробнее.

Автор: Drizhenko 26.2.2006, 11:10
Скрулбар, конечно можно и отрубить, но всё это не то. Да и вообще кому нужны эти фреймы. Помогите реализовать это на php. Неужели вы не понимаете о чем я говорю. Мне кажется все сайты так устроены. Зачем писать сотни страниц с одинаковым участком кода?

Автор: Guedda 26.2.2006, 12:12
А-а-а-а.... Понятно, что хочешь.
Используй templates.
http://forum.vingrad.ru/index.php?showtopic=77542&view=findpost&p=611874
В самом конце об этом говорится.

Автор: Drizhenko 26.2.2006, 12:20
Спасибо, попробую.

Автор: Drizhenko 27.2.2006, 05:30
Сделал файл Index.php Туда добавил строку
Код

<td class="content">{content}</td>

И ссылку
Код

<a href="script.php" >

Содержимое файла script.php
Код

<?php
    $template = file_get_contents("Index.php");    
    preg_replace("{content}", "bla-bla-bla", $template);    
    readfile($template);
?>

При клике на ссылке вылазит ошибка
Warning: readfile(Часть содержимого файла Index.php in C:\www\Apache2\htdocs\My\script.php on line 4
Подскажите, пожалуйста что делать.

Автор: Guedda 28.2.2006, 08:39
А что это за функция такая : readfile?

Автор: Drizhenko 28.2.2006, 10:05
Читает файл и записывает его в стандартный вывод

Автор: Guedda 28.2.2006, 10:54
А что, если вместо readfile просто написать:
Код

echo $template;

Пробовал?

Автор: -=Ustas=- 28.2.2006, 11:24
Drizhenko, readfile - выводит файл в поток, при этом в качестве аргумента принимает не содержимое файла, а ссылку на файл, т.е. путь к файлу. А ты ей пихаешь уже готовый контент ))

Делай как сказал Guedda...
Добавлено @ 11:28
Точнее так:
Код

$template = file_get_contents("Index.php");    
$template = preg_replace("{content}", "bla-bla-bla", $template);    
echo $template;

Автор: клоп 28.2.2006, 11:54
Цитата(Drizhenko @ 26.2.2006, 06:19)
Подскажите, пожалуйста. Имеется меню в левой части главной странице. Как сделать, чтобы при выборе пункта меню открывалась не новая страница, а в главной странице, в определенном месте отображалась новая, соответствующая пункту меню. Что-то типа frame в html.

Drizhenko тебе нужно то, что я описал в топике Notice: Undefined variable: PHP_SELF in ..... И к чему в нем пришли все остальные.

Автор: Drizhenko 1.3.2006, 07:37
-=Ustas=-, Guedda, Спасибо заработало.

Автор: krulik 1.3.2006, 10:44
Я канечно извиняюсь. Но можно пример выложить. А то я както по вашим постам немогу разобраться как это делается smile

Автор: smartov 1.3.2006, 12:24
krulik,
Цитата(-=Ustas=- @ 28.2.2006, 10:24 Найти цитируемый пост)
Делай как сказал Guedda...
Добавлено @ 10:28
Точнее так:

Код

$template = file_get_contents("Index.php");    
$template = preg_replace("{content}", "bla-bla-bla", $template);    
echo $template;

Автор: Drizhenko 1.3.2006, 12:48
Я сделал так
Файл Index.php
Код

<?php
  $template = file_get_contents("Site.php");

  switch (isset($key)) {    //isset - определяет, установлена ли переменная
  case '1':
        $file=implode ('', file('docs/Films.php'));  //читет файл в строку
  break;
  case '2':
        $file=implode ('', file('docs/Films.php'));
  break;
  case '3':
        $file=implode ('', file('docs/Games.php'));
  break;
  case '4':
        $file=implode ('', file('docs/Soft.php'));
  break;
  case '5':
        $file=implode ('', file('docs/Disk.php'));
  break;
  case '6':
        $file=implode ('', file('docs/Disk_films.php'));
  break;
  case '7':
        $file=implode ('', file('docs/Disk_games.php'));
  break;
  case '8':
        $file=implode ('', file('docs/Disk_soft.php'));
  break;
  case '9':
        $file=implode ('', file('docs/Recycle.php'));
  break;
    case '10':
        $file=implode ('', file('docs/Help_disc.php'));
  break;
  default:
    $file=implode ('', file('docs/Films.php'));
  }

  $template = preg_replace("/\{Middle\}/is", $file, $template);
  echo $template;
?>


В файле Site.php есть ссылки, типа
Код

<a href="index.php?key=1" >

И вот такая штука: {Middle}

Когда вызывается Index.php, то он сам вписывает вместо {Middle} нужный текст и выводит полученный результат.

Прикол в том, что php код не вставляется, вместо {Middle}, а если просто текстовый файл, то вставляется. Если кто знает почему. Подскажите.

Автор: smartov 1.3.2006, 13:09
Drizhenko, уверен что PHP код точно так же прекрасно встявляется но естественно не отрабатывает. Потому что на отработку его никто не напрявляет.
В системе push-шаблонов (как ты реализуешь тут) надо все данные в своем скрипте предварительно обрабатывать, а в шаблон выдавать уже готовый html.

Автор: Тиль 1.3.2006, 13:43
Drizhenko сделай так:
на ссылку напиши
Код

<a href="index.php?do=news" target=_self>Текст ссылки</a>


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

Код

<?php 
Error_Reporting(E_ALL & ~E_NOTICE); 
?>
<?php 
if(isset($_GET['do'])) { $do=$_GET['do']; } 
switch($do) 
    {case 'news':$number = 5;include("news/show_news.php");break;          
           } 
?>


break нужен точно, проверенно smile smile

Автор: Guedda 1.3.2006, 14:01
Файл index.php:
Код

<?
  $template = file_get_contents("mybook.tpl");    
  $template = preg_replace("{head}", "Заголовок", $template);
  $template = preg_replace("{content}", "Я люблю людей!!!", $template);     
  echo $template;
?>

Файл mybook.tpl:
Код

<center><b>{head}</b></center><p>
{content}
</p>

В браузере после того, как напишешь в адресной строке index.php выведется следующее:
Цитата

Заголовок
Я люблю людей!!!

Автор: Drizhenko 2.3.2006, 06:20
Тиль, Guedda, ваши варианты работают. Но в варианте Guedda, как я и писал ранее, если попытаться вставить вместо "Я люблю людей!!!" php файл, то он не обрабатывается, про что и сказал smartov.

А как его обработать и вставить вместо метки вот вопрос????

Автор: -=Ustas=- 2.3.2006, 10:10
Цитата(Drizhenko @ 2.3.2006, 06:20 Найти цитируемый пост)
если попытаться вставить вместо "Я люблю людей!!!" php файл, то он не обрабатывается

Естественно и не будет обрабатываться. Ты должен туда передавать уже готовый контент, а не php файлы!
Код

<?php

$template = file_get_contents("mybook.tpl");    
$template = preg_replace("{head}", "Заголовок", $template);
$content = file_get_contents("your_file.php");
$template = preg_replace("{content}", $content, $template);     
echo $template;

?>

Автор: Drizhenko 2.3.2006, 10:57
Сделал так, что-то не получилось. {head} заменяется, а {content} нет.

Автор: -=Ustas=- 2.3.2006, 11:02
Drizhenko,
1. Покажи код замены и вывода.
2. Покажи код файла, содержимое которого ты хочешь вывести.

Автор: smartov 2.3.2006, 12:04
-=Ustas=-, а к чему ты написал свой вариант.
Код файла "your_file.php" так как написал ты все равно не обработается. Ты просто его вляпаешь в вывод, просто код, а не результат его выполнения.

Drizhenko,
Тут может помочь либо eval либо include если перед инклюдом начать буферизацию, а потом уже вставить результат выполнения. То бишь

mybook.tpl
Код

<p>А вот вам списочек</p>
<ul>
{spisochek.php}
</ul>


spisochek.php (например такой...)
Код

<?
for ($i=0;$i<20;$i++)
{
   echo '<li>Элемент номер '.$i.'</li>'."\n"
}
?>


index.php
Код

<?
//получаем результат выполнения файла spisochek.php
ob_start();
include('spisochek.php');
$buffer = ob_get_contents();
ob_end_clean();

//читаем файл template
$template = file_get_contents("mybook.tpl");

//пихаем результат выполнения куда надо
$template = preg_replace('/\{spisochek\.php\}/', $buffer, $template);

//выводим
echo $template;
 
?>

Автор: -=Ustas=- 2.3.2006, 12:16
smartov, ты прав, ступил немного smile Результат обработки можно получить по http только:
Код

<?php

$template = file_get_contents("mybook.tpl");    
$template = preg_replace("{head}", "Заголовок", $template);
$content = file_get_contents("http://your_host.com/your_file.php");
$template = preg_replace("{content}", $content, $template);     
echo $template;

?>


И то, только в том случае, если в PHP разрешено использование файловых функций на удаленные файлы.

Автор: Drizhenko 2.3.2006, 19:31
smartov, -=Ustas=-, Испробовал, предложенные вами варианты. Оба получились. Спасибо.

Автор: Vbif 17.7.2006, 11:17
народ есть такой вопрос по этой же теме....
вот есть функция:
Код

function cat($path)
{
    $dh=opendir($path);
    while (($file = readdir($dh))!==false)
    {
        if (($file!=".")&&($file!="..")&&(strstr($file,".db")!==".db"))
        {
            $filepath=$path.$file;
            $contn[]=$filepath;
        }
    }
    for($i=0;$i<count($contn);$i++)
    {
        if (is_dir ($contn ["$i"])) echo "<option>". basename($contn ["$i"])."</option><br>";
    }
    rewinddir($dh);
}



и мне нужно чтобы она выводилась  на главной странице в указанном месте .. с помощью следущего кода...


Код

$h=cat($path);
$tpl->load_template('fotogal.tpl');
$tpl->set('{chos}',$f);
$tpl->set('{chos3}',$h);
$tpl->set('{chos2}',$g);
$tpl->set('{con}',$a);
$tpl->set('{nav}',$b);
$tpl->compile('content');
$tpl->clear();


И вот в чём проблема.. все переменные нормально выводятся а вот функция cat($path), не выводит всех значений, она выводит только одно...
помогите плиз в чём проблема...    

Автор: Vbif 17.7.2006, 13:35
хотя в принципе уже сам разобрался... саппорт уже не нужен=)  smile  

Автор: zetxi815eb 6.9.2007, 18:26
Нифига не понимаю...в веб программировании я полный нуль..

Помогите плиз такую фишку сделать

index.php

Кнопки: Меню , События, Новости
И чтоб при нажатии на какую-нить из кнопок менялась переменная $var1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)