Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: php отображаеться в html'e
 
 автор: KR0k   (09.08.2005 в 17:38)   письмо автору
 
 

Долго думал как назвать тему...ну ладно вся проблема не в этом
Вобщея я делаю CMS, в которой все страницы создаються в WISIWIG редакторе, и отправляються в базу в ввиде HTML кода ...надеюсь понятно изложил.
А вся проблема в том что мне нужно как-то в тот HTML который храниться в базе php вставки к примеру вывод новостей или еще чего....щас это выгладет

много HTML'я до новостей
<? news('full',7);?>
много HTML'я после новости

опять таки надеюсь что меня поняли.... а проблема в том что в браузере я вижу 100% информацию извлеченную из базы. А хотелось бы что бы вместо <? news('full',7);?>, выполнялась функция news().
помогите, кто чем сможет....

   
 
 автор: cheops   (09.08.2005 в 21:01)   письмо автору
 
   для: KR0k   (09.08.2005 в 17:38)
 

Следует создать конфигурационный файл .htaccess, в котором прописать, что html файлы следует интерпретировать как php-скрипты. Подробности в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1010

   
 
 автор: kr0k   (10.08.2005 в 12:03)   письмо автору
 
   для: cheops   (09.08.2005 в 21:01)
 

Всетаки меня не совсем правильно поняли....
Делов том что расширение файла у меня какразтаки php. Но HTML код, храниться в базе пример код я приводил выше. А выводиться это у меня через echo $pages['main']; Но он просто, выводиться а мне хорошо бы было что бы еще и результат выполнения функции в том месте в котором она стоит выводил. У функций будут входящие параметры...

   
 
 автор: cheops   (10.08.2005 в 13:24)   письмо автору
 
   для: kr0k   (10.08.2005 в 12:03)
 

Тогда следует анализировать содержимое HTML-скроки и выводить её по частям. Сначала вывести до первого вхождения <?, содержимое между тэгами <? и ?> пропустить через функцию eval(), затем опять вывести в окно браузера и т.д. Т.е. осуществить разбор файла, как это делает PHP.

   
 
 автор: KR0k   (10.08.2005 в 15:28)   письмо автору
 
   для: cheops   (10.08.2005 в 13:24)
 

Спасибо!!!
По моему eval() это то что надо, только что-то у меня не получаеться его запустить...

получаеться только переменные заменять те вместо $test у меня ее значение выводиться, но вот функции так и остаються news('full',7);

Может call_user_func() попробывать запустить? и еще одна просба.... вроде решение почти есть, помогите мне получаемый текст разпарсить....я просто вторую ноч с этим борюсь....сильно торможу!

   
 
 автор: cheops   (10.08.2005 в 18:16)   письмо автору
 
   для: KR0k   (10.08.2005 в 15:28)
 

А распластать в смысле отделить html от php?

   
 
 автор: KR0k   (10.08.2005 в 18:35)   письмо автору
 
   для: cheops   (10.08.2005 в 18:16)
 

Ну да, к примеру у меня есть
$txt = '<b>Пример</b><br><?php_function('val1','val2');?> кода взятого из базы....';
Тут надо что-то с этим сделать что бы при:
echo $txt;
Вывело $txt не как есть(Я в курсе что там у меня синтасическая ошибка, но в данный момент это погоды не делает), а вместе с результатами работы функции!

   
 
 автор: cheops   (11.08.2005 в 01:37)   письмо автору
 
   для: KR0k   (10.08.2005 в 18:35)
 

Обычно прибегают примерно к такому коду
<?php
  $txt 
'<b>Пример</b><br><?php echo "Hello"; ?> кода взятого из базы....';
  
// Вызываем функцию замены
  
echo preg_replace_callback("|<\?php([^?]+)\?>|i",
                             
"execute_php",
                             
$txt);
  
// функция обратного вызова
  
function execute_php($matches
  {
    
// как обычно: $matches[0] -  полное вхождение шаблона
    // $matches[1] - вхождение первой подмаски,
    // заключенной в круглые скобки, и так далее...
    
return eval($matches[1]);
  }
?>

Только в данном конкретном случае... не очень хорошо получается - сначала выводится Hello, а потом всё остальное... У вас функция возвращает какое нибудь значение или просто производит побочные действия?

   
 
 автор: KR0k   (11.08.2005 в 12:57)   письмо автору
 
   для: cheops   (11.08.2005 в 01:37)
 

Да, возвращает!

   
 
 автор: Loki   (10.08.2005 в 13:28)   письмо автору
 
   для: kr0k   (10.08.2005 в 12:03)
 

http://softtime.ru/forum/read.php?id_forum=1&id_theme=5826&page=1
Тут обсуждали похожую задачку. Как я понял, придется заводить систему шаблонных тегов и подставлять вместо них результаты выполнения функции.

   
 
 автор: Андрюха.   (10.08.2005 в 12:37)   письмо автору
 
   для: KR0k   (09.08.2005 в 17:38)
 

А 'full' это переменная или ...?
echo (news($full,7));

   
 
 автор: KR0k   (10.08.2005 в 13:26)   письмо автору
 
   для: Андрюха.   (10.08.2005 в 12:37)
 

В данный момент это не столь важно.... но если кому интересно, то это тип отображения новостей full - Полный, title - только название....и тд!!!
Вобщем входные параметры не переменные....они статичные!

   
 
 автор: Андрюха.   (10.08.2005 в 13:47)   письмо автору
 
   для: KR0k   (10.08.2005 в 13:26)
 

Ну а часть функции не покажете. И по-моему лучше передать $id, а в функции определить full или title

   
 
 автор: KR0k   (10.08.2005 в 15:25)   письмо автору
 
   для: Андрюха.   (10.08.2005 в 13:47)
 

Да пожалуйсто если мне помогут разобраться...
кусок кода из index.php

         $dbi = mysql_query('SELECT * FROM pages WHERE id='.$main_page.';');
         $page = mysql_fetch_array($dbi);
         echo '<h1>'.$page['title'].'</h1>';
         echo $page['txt'];   // <- вот вывод данных из базы из за которых я 2ноч не сплю


пример содержимого базы я показал в первом посте.

А все это вставляеться в шаблом путем вызова этой функции index.tpl

<html>
<head>
<title><?=$title;?></title>
</head>
<body>
<?main();?>
</body>
</html>

Скажу сразу что тут все в порядке....

   
 
 автор: Андрюха.   (10.08.2005 в 17:12)   письмо автору
 
   для: KR0k   (10.08.2005 в 15:25)
 

Ну не совсем
<?main();?> равно забыл и ";" ?

- файл 1.php ----- tpru-u....(index.tpl)

<?php
include("2.php");
?>
много HTML'я<p>
<?=(news('full',38376))?>
<p>много HTML'я

файл 2.php

<?php  function news($id,$main_page)
{
         
$dbi mysql_query('SELECT * FROM ss_products WHERE ID='.$main_page.';');
         
$page mysql_fetch_array($dbi);
         echo 
'<h1>'.$page[0].'</h1>';
         echo 
$page[1];
}
?>

Так имеешь в виду ???

   
 
 автор: KR0k   (10.08.2005 в 18:47)   письмо автору
 
   для: Андрюха.   (10.08.2005 в 17:12)
 

ой, наверно наши мысли разошлись.....
У меня проблема в вывде данных из базы была!
дело в том что $page[1] это не просто текст! там есть и php скрипты!

   
 
 автор: KR0k   (10.08.2005 в 17:08)   письмо автору
 
   для: KR0k   (09.08.2005 в 17:38)
 

У меня пока только одним способом получилость это реализовать не меняя код,
я в базу занашу не

много HTML'я до новостей 
<? news('full',7);?> 
много HTML'я после новости

а

Много HTML'я до
<iframe src='test.php?test=123' frameborder=0 vspace=0 hspace=0 marginwidth=0 marginheight=0 scrolling=no>
</iframe>
Много HTML'я после


Может всетаки кто-то предложет что-нибудь более красивое, а то эти фреймы....

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования