Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Что сделать для правильно отбражения сгенерированной страницы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: У меня в часности при выводе сбевается форматирование даже при использовании стиля
Sacerd_Alexey
Отправлено: 28 Мая, 2007 - 10:50:39
Post Id



Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2007  
Откуда: Казань


Помог: 0 раз(а)




Здрасте!!! Радость
У меня такой вопрос.
Как можно сделать чтобы не сбивалось форматирование при отображении полностью сгенерированной страницы.
Ну например таблица:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $text = explode("|",file($file));
  3. $len = count($text)-1;
  4. $width = (int) (100/$len);
  5. unset($html);
  6. $html = "<table width="100%" align="center"><tr>";
  7. for ($i = 0; $i <= $len; $i++){
  8. $link = explode("|",$text[$i]);
  9.  
  10. //Это только часть кода
  11. $html = $html."<td width="".$len."" height="20" nowrap="nowrap" align="center" class="top"><a class="top" href="".$link[0]."">".$link[1]."</a></td>";
  12. //тут в оригенале стоит выбор меню или контент(печатаем ссылку или текст)
  13.  
  14. $html = $html."</tr></table>";
  15. echo $html;}
  16. ?>

По стилям должно быть по центру... это формирование меню и контента... на при любых тегах и стилях выравнивание по левому краю...
Как от этого ИЗБАВИТСЯ!:cry2::cry2::cry2: Замонался уже за неделю ужо!
(извините, но дроби где нужно не печатает)
 
 Top
evgenijj
Отправлено: 28 Мая, 2007 - 14:11:00
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Знаешь, твой стиль программирования вызывает некоторое недоумение. Поясню:
$text = explode("|",file($file));

array file ( string filename [, int use_include_path [, resource context]] )
array explode ( string separator, string string [, int limit] )

Как мы видим, функция file() возвращает МАССИВ, а функция explode в качестве второго аргументы ожидает СТРОКУ.

Дальнейшие вычисления не менее загадочны:
$len = count($text)-1;
$width = (int) (100/$len);

Я не знаю, что ты получаешь в качестве значения переменной $len, но пикселы там явно не получаются. А указываешь ты именно пикселы в качестве значения атрибута width тега <td>. Если же это проценты, то надо это указать width="20%":
http://htmlbook[dot]ru/html/td[dot]html

Давай ты сперва отладишь свой скрипт, а потом мы посморим на верстку?
 
 Top
Sacerd_Alexey
Отправлено: 28 Мая, 2007 - 16:04:40
Post Id



Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2007  
Откуда: Казань


Помог: 0 раз(а)




evgenijj пишет:
Как мы видим, функция file() возвращает МАССИВ, а функция explode в качестве второго аргументы ожидает СТРОКУ.

Дальнейшие вычисления не менее загадочны:
$len = count($text)-1;
$width = (int) (100/$len);


Там проценты просто забыл символ поставить... я здесь заново писал... стормозил надо было скопировать...

Дело в том что код:

и
PHP:
скопировать код в буфер обмена
  1. <? $text="<center>XXX</center";
  2. echo $text; ?>

Дают разный результат... т.к. первый код считается 'html', а второй код текст...
И при выводе вторая просто не центруется!!! Не понял
Я и хочу понять??? можно ли что-то зделать чтоб он понимал строку при выводе как 'html' в плане форматирования... т.к. в остальном нет нарушений...
 
 Top
evgenijj
Отправлено: 28 Мая, 2007 - 17:08:48
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Так где исправленный код?

Цитата:

Дело в том что код:

и
PHP:
скопировать код в буфер обмена
  1.  
  2. <? $text="<center>XXX</center";
  3.  echo $text; ?>
  4.  

Дают разный результат... т.к. первый код считается 'html', а второй код текст...

Ничего подобного! Браузер, который показывает сформатированный текст (HTML) не имеет ни малейшего представления о том, был ли этот html сверстан человеком, или сформирован CGI-сценарием. Посмотри, что сгенерировал твой скрипт. Вообще, в данном случае достаточно было просто показать html, который формируется php-скриптом.

P.S. Вот этот кусок кода тоже вызывает удивление - один открывающий тег <table> и несколько закрывающих. Да и echo $html; должно быть за пределами цикла.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. ..........................................
  4.  for ($i = 0; $i <= $len; $i++)
  5. {
  6.      .............................................
  7.      $html = $html."</tr></table>";
  8.      echo $html;
  9. }
  10.  ?>
  11.  
 
 Top
Sacerd_Alexey
Отправлено: 28 Мая, 2007 - 21:16:30
Post Id



Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2007  
Откуда: Казань


Помог: 0 раз(а)




Вот код который о котором мы говорим, но замечу что это опять не всё, т.к. кидать сюда 20 Кило в тексте нет смысла... да и исходная страница формируется их 30 слишним функий... которые сюда кидать бесмыслено... Если интересно, то на основе этой функции при разных значения $vid => формируется; баннер; поиск; верхнее, нижнее левое, правое меню; контент в виде форума, основных страниц, каталога, галереи и т.д.
она состоит из 8 подфункий... короче если интересно... стучи...

Просто попробуй второй код... и не забудь, что в начале формирования любой страницы идёт:
PHP:
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
  6. echo $title_meta;
  7. </nead>
  8. <body>

Ну конец сам допишешь, вот код который работает:
PHP:
скопировать код в буфер обмена
  1. <?
  2. function menu ($vid){
  3.         $menu = file ('config/menu');
  4.         $len = count($menu);
  5.         $width = 100/$len;
  6.         if ($vid == 'top') {?><table width="100%" align="center"><tr><? }
  7.         for ($i = 0; $i <= $len-1; $i++){
  8.                 $link = explode("|",$menu[$i]);
  9.                 if ($vid == 'top') {?><td width="<? echo $width; ?>%" height="20" nowrap="nowrap" align="center" class="top">
  10. <center><a class="top" href="<? echo $link[0]; ?>"><? echo $link[1] ?></a></center></td><? }
  11.                 if ($vid == 'bottom') {
  12.                         if ($i != $len) {?><a class="bottom" href="<? echo $link[0] ?>"><? echo $link[1]; ?></a>  |<?
  13.                                 } else {?>  <a class="bottom" href="<? echo $link[0]; ?>"><? echo $link[1]; ?></a>  <? }
  14.                 }
  15.                
  16.         }
  17.         if ($vid == 'top') {?></tr></table><? ;}
  18. }
  19. ?>

А вот который не работает:
PHP:
скопировать код в буфер обмена
  1. <?
  2. function menu ($vid){
  3.         $menu = file ('config/menu');
  4.         $len = count($menu);
  5.         $width = 100/$len;
  6.         if ($vid == 'top') {echo "<table width="100%" align="center"><tr>"; }
  7.         for ($i = 0; $i <= $len-1; $i++){
  8.                 $link = explode("|",$menu[$i]);
  9.                 if ($vid == 'top') {echo "<td width="".$width."%" height="20" nowrap="nowrap" align="center" class="top">
  10. <center><a class="top" href="".$link[0]."">".$link[1]."</a></center></td>"; }
  11.                 if ($vid == 'bottom') {
  12.                         if ($i != $len) {echo "  <a class="bottom" href="".$link[0]."">".$link[1]."</a>  |";
  13.                                 } else {echo "  <a class="bottom" href="".$link[0]."">".$link[1]."</a>  "; }
  14.                 }
  15.                
  16.         }
  17.         if ($vid == 'top') {echo "</tr></table>" ;}
  18. }
  19. ?>
И тоже самое если вместо печати сформировать строку и в конце её напечатать.

отмечу что файл 'config/menu' формируется динамически каждый раз в начале любой страницы и удаляется в конце сессии или при закрытии браузераи имеет следующий вид... это тоже кусок при формировании верхнего и нижнего меню...
PHP:
скопировать код в буфер обмена
  1.  
  2. index.php|Главная
  3. index.php?page=catalog|Каталог Продукции
  4. index.php?page=galery|Галерея
  5.  


Текст одинаковый получается за исключение того, что тег </a> на другой строке...
От этого можно избавится: проверка на предедущий символ и если перевод, то пишем код забоя, но и это не помогает...
Даже выравнивание и в таблице и <center>, а ссылка в данном случае всё равно слева... проверялось на разных хостах как платных так и бесплатных...

Есть пару страниц которые надо вывести только через текст, то есть формируется $html и когда заканчивается формирование вместо знака ожидания появляется текст... так вот... если его запихать в .html и передать управление, то работает, но у меня в том месте это не возможно... т.к. использован принцип вроде похожий на технологию ajax...

Суть такова... страница сидит в кэше и постояно на связи с страницой создания... кеш у пользователя только в ОЗУ --- НЕ в файле, копия синхронизации на сервере связана с сесией и браузером... при любом действии, что-то добавляется, что-то убирается из кэша... принцип работы по ссылкам без перегруза страницы... и там я эту проблему как в выше приведуном примере решить не могу... покуда передаются только переменные...

Надеюсь понял... если что мож в асу стучать, а то как то долго здесь...

А если кому будет интересно я потом оформурую и сюда закину...
В асю в любое время суток... милости просим!!! Радость

Сразу пощу прощения если где есть ошибки... просто окно для ввода сообщений маленькое. Про слеши сам знаешь...
 
 Top
evgenijj
Отправлено: 29 Мая, 2007 - 00:16:11
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. menu1("top");
  4. echo "<hr>";
  5. menu2("top");
  6. function menu1($vid)
  7. {
  8.     $menu = file ('config/menu.txt');
  9.     $len = count($menu);
  10.     $width = 100/$len;
  11.     if ($vid == 'top')
  12.     {
  13.     ?>
  14.     <table width="100%" align="center"><tr>
  15.     <?
  16.     }
  17.     for ($i = 0; $i <= $len-1; $i++)
  18.     {
  19.         $link = explode("|",$menu[$i]);
  20.         if ($vid == 'top')
  21.         {
  22.             ?>
  23.             <td width="<? echo $width; ?>%" height="20" nowrap="nowrap" align="center" class="top">
  24.             <center>
  25.             <a class="top" href="<? echo $link[0]; ?>">
  26.             <?
  27.             echo $link[1]
  28.             ?>
  29.             </a></center></td>
  30.             <?
  31.         }
  32.          if ($vid == 'bottom')
  33.         {
  34.              if ($i != $len)
  35.             {
  36.                 ?>
  37.                 <a class="bottom" href="<? echo $link[0] ?>">
  38.                 <? echo $link[1]; ?>
  39.                 </a>  |
  40.                 <?
  41.              }
  42.             else
  43.             {
  44.                 ?>  
  45.                 <a class="bottom" href="<? echo $link[0]; ?>">
  46.                 <?
  47.                 echo $link[1];
  48.                 ?>
  49.                 </a>  
  50.                 <?
  51.             }
  52.          }
  53.          
  54.      }
  55.      if ($vid == 'top')
  56.     {
  57.         ?>
  58.         </tr></table>
  59.         <? ;
  60.     }
  61. }
  62. ?>
  63.  
  64. <?
  65. function menu2($vid){
  66.     $menu = file ('config/menu.txt');
  67.     $len = count($menu);
  68.     $width = 100/$len;
  69.     if ($vid == 'top')
  70.     {
  71.         echo "<table width='100%' align='center'><tr>";
  72.     }
  73.     for ($i = 0; $i <= $len-1; $i++)
  74.     {
  75.         $link = explode("|", $menu[$i]);
  76.         if ($vid == 'top')
  77.         {
  78.             echo "<td width='".$width."%' height='20' nowrap='nowrap' align='center' class='top'>";
  79.             echo "<center><a class='top' href='".$link[0]."'>".$link[1]."</a></center></td>";
  80.         }
  81.         if ($vid == 'bottom')
  82.         {
  83.             if ($i != $len)
  84.             {
  85.                 echo "  <a class='bottom' href='".$link[0]."'>".$link[1]."</a>  |";
  86.             }
  87.             else
  88.             {
  89.                 echo "  <a class='bottom' href='".$link[0]."'>".$link[1]."</a>  ";
  90.             }
  91.         }
  92.          
  93.     }
  94.     if ($vid == 'top')
  95.     {
  96.         echo "</tr></table>" ;
  97.     }
  98. }
  99. ?>
  100.  


В случае $vid="top"
PHP:
скопировать код в буфер обмена
  1.  
  2. <table width="100%" align="center">
  3. <tr>
  4.   <td width="33.333333333333%" height="20" nowrap="nowrap" align="center" class="top">
  5.   <center>
  6.   <a class="top" href="about.html">О компании</a>
  7.   </center>
  8.   </td>
  9.   <td width="33.333333333333%" height="20" nowrap="nowrap" align="center" class="top">
  10.   <center>
  11.   <a class="top" href="catalog.html">Каталог</a>
  12.   </center>
  13.   </td>
  14.   <td width="33.333333333333%" height="20" nowrap="nowrap" align="center" class="top">
  15.   <center>
  16.   <a class="top" href="support.html">Техподдержка</a>
  17.   </center>
  18.   </td>
  19. </tr>
  20. </table>
  21.  
  22. <hr>
  23.  
  24. <table width='100%' align='center'>
  25. <tr>
  26.   <td width='33.333333333333%' height='20' nowrap='nowrap' align='center' class='top'>
  27.   <center>
  28.   <a class='top' href='about.html'>О компании</a>
  29.   </center>
  30.   </td>
  31.   <td width='33.333333333333%' height='20' nowrap='nowrap' align='center' class='top'>
  32.   <center>
  33.   <a class='top' href='catalog.html'>Каталог</a>
  34.   </center>
  35.   </td>
  36.   <td width='33.333333333333%' height='20' nowrap='nowrap' align='center' class='top'>
  37.   <center>
  38.   <a class='top' href='support.html'>Техподдержка</a>
  39.   </center>
  40.   </td>
  41. </tr>
  42. </table>
  43.  



В случае $vid="bottom"
PHP:
скопировать код в буфер обмена
  1.  
  2. <a class="bottom" href="about.html">О компании</a>  |
  3. <a class="bottom" href="catalog.html">Каталог</a>  |
  4. <a class="bottom" href="support.html">Техподдержка</a>  |
  5.  
  6. <hr>
  7.  
  8. <a class='bottom' href='about.html'>О компании</a>  |  
  9. <a class='bottom' href='catalog.html'>Каталог</a>  |  
  10. <a class='bottom' href='support.html'>Техподдержка</a>  |
  11.  



Оба скрипта формируют одинаковый html и все прекрасно выравнивается.
 
 Top
Sacerd_Alexey
Отправлено: 29 Мая, 2007 - 05:17:52
Post Id



Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2007  
Откуда: Казань


Помог: 0 раз(а)




Я вечером исходник выложу... посмотришь...

Кстати, разреши заметить, что я пользуюсь IE7 для проверки и опера
 
 Top
evgenijj
Отправлено: 29 Мая, 2007 - 08:48:58
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Sacerd_Alexey пишет:
Я вечером исходник выложу... посмотришь...
Кстати, разреши заметить, что я пользуюсь IE7 для проверки и опера

Тяжело с тобой. Есть два скрипта, один из которых, по твоим словам, работает некорректно. Я проверил работу и того ( функция menu1() ) и другого ( функция menu2() ).Обе функции формируют одинаковый html, который корректно отображается браузерами (и MS IE и Opera и Firefox).
Если имеется ввиду формирование ссылок для $vid="bottom" то там и нет никаких стилей. Три строчных (уровня строки) элемента <a> - так они именно так и должны располагаться на странице (выравнивание влево).
PHP:
скопировать код в буфер обмена
  1.  
  2.  <a class="bottom" href="about.html">О компании</a>  |
  3.  <a class="bottom" href="catalog.html">Каталог</a>  |
  4.  <a class="bottom" href="support.html">Техподдержка</a>  |
  5.  
  6.  <hr>
  7.  
  8.  <a class='bottom' href='about.html'>О компании</a>  |  
  9.  <a class='bottom' href='catalog.html'>Каталог</a>  |  
  10.  <a class='bottom' href='support.html'>Техподдержка</a>  |
  11.  

Попробуй сосредоточиться, собраться с силами и конкретно указать, наконец, что у тебя за проблема?
* скрипт формирует некорректный html, который неправильно показывает браузер
* глюк с отдельно взятым браузером, который некорректно показывает корректный html
* что-то еще
 
 Top
Mister
Отправлено: 29 Мая, 2007 - 23:32:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2007  
Откуда: Сухиничи Калуж.обл.


Помог: 0 раз(а)

[+]


Может проще сначала всю страницу сделать на чистом html? а потом уже вставлять всё в скрипт?


-----
..я не специалист, а только учусь
 
 Top
Viper
Отправлено: 30 Мая, 2007 - 10:10:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




да вообще-то так часто и делают Улыбка если не знают html/css


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB