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

Форум PHP

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

 

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

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

тема: Вывод списка в колонки
 
 автор: TetRiska   (01.08.2009 в 16:35)   письмо автору
 
 

Кто подскажет как практически это реализовать...В 1 колонку вывести не проблема, т.к. стоит раз в цикле таблицу прогнать..а как вывести в 2 колонки..чтобы было примерно так:

Барсетки, портфели                                             Блокноты, визитницы
Брелки                                                         Бутылки
Ключницы, сигаретницы


и тд...

и еще чтобы соблюдало алфавитный порядок с лева направо...

  Ответить  
 
 автор: EXP   (01.08.2009 в 16:39)   письмо автору
 
   для: TetRiska   (01.08.2009 в 16:35)
 

for($i=0;$i<20;$i++){
echo ($i&1)? 'right':'left';
}

  Ответить  
 
 автор: TetRiska   (01.08.2009 в 17:07)   письмо автору
 
   для: EXP   (01.08.2009 в 16:39)
 

а можно по подробней насчет - 'right':'left' . не совсем понятен ход

  Ответить  
 
 автор: EXP   (01.08.2009 в 17:21)   письмо автору
 
   для: TetRiska   (01.08.2009 в 17:07)
 

<?php
header
('Content-type:text/plain');
$a = array(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7);

for(
$i=0;$i<count($a);$i++)
echo (
$i&1)? "\t"$a[$i] ."\n"$a[$i] ."\t";
?>
например

  Ответить  
 
 автор: TetRiska   (01.08.2009 в 17:53)   письмо автору
 
   для: EXP   (01.08.2009 в 17:21)
 

выведет же все в строку, а надо 2 колонки

  Ответить  
 
 автор: EXP   (01.08.2009 в 18:10)   письмо автору
 
   для: TetRiska   (01.08.2009 в 17:53)
 

В дримвивере тестите ?)
вставьте вместо header(......) просто echo '<pre>';

  Ответить  
 
 автор: Рома   (01.08.2009 в 17:59)   письмо автору
 
   для: TetRiska   (01.08.2009 в 16:35)
 

>т.к. стоит раз в цикле таблицу прогнать

если я правильно понял про таблицу, то можно и так:
<?php
echo "<table width=\"96%\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" bgcolor=\"#F3F3F3\">";
echo 
"<tr>";

for(
$i=0;$i<count($a);$i++)
 {
 
// выводите ячейку
 
echo "<td>$a[$i]</td>";
 
// указываете сколько ячеек будет в одном ряду, к примеру 3
 // если ряд заполнен, закрываете его, открываете новый
 
if($i%3==0){echo "</tr><tr>";} 
 }
echo 
"</tr></table>";

  Ответить  
 
 автор: Рома   (01.08.2009 в 18:15)   письмо автору
 
   для: Рома   (01.08.2009 в 17:59)
 

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

<?php 
echo "<table width=\"96%\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" bgcolor=\"#F3F3F3\">"
echo 
"<tr>"
$temp=0// объявляете новую переменную
for($i=0;$i<=count($a);$i++) 
 {
 
$temp++; // теперь она уже равна 1
 // выводите ячейку 
 
echo "<td>$a[$i]</td>"
 
// указываете сколько ячеек будет в одном ряду, к примеру 3 
 // если ряд заполнен, закрываете его, открываете новый 
 
if($temp%3==0){echo "</tr><tr>";}  
 } 
echo 
"</tr></table>";

  Ответить  
 
 автор: EXP   (01.08.2009 в 18:16)   письмо автору
 
   для: Рома   (01.08.2009 в 17:59)
 

if($i%2/=0){echo "</tr><tr>";}
сделает так что последний элемент tr останется пустым
(не видел добавленного)
и + откутствие в нижнем ряду недостающих элементов td в случае нечётного размера массива

  Ответить  
 
 автор: Рома   (01.08.2009 в 18:31)   письмо автору
15 Кб
 
   для: EXP   (01.08.2009 в 18:16)
 

>+ откутствие в нижнем ряду недостающих элементов td в случае нечётного размера массива

Разметку это не потянет. Каждая ячейка будет находиться на своем месте, ведь про rowspan нигде же не упомянается.

Или про colspan, все время путаю.

  Ответить  
 
 автор: TetRiska   (01.08.2009 в 18:40)   письмо автору
 
   для: Рома   (01.08.2009 в 18:31)
 

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

$res = mysql_query("SELECT * FROM `".PREFIX."catalog` 
GROUP BY description ASC")    or die ("Ошибка запроса №1 : catalog/index.php" . mysql_error()); 

while($catrow = mysql_fetch_assoc($res))
    {
      $catalog .= "<tr>";
        $catalog .= "<td width='5%'><div style='margin-top:10px'><a href='".DOMEN."/catalog/id".$catrow['id']."'><img border='0' src='".DOMEN."".$catrow['photo']."' 
title='".$catrow['description']."' />
</a></div></td>";
        $catalog .= "<td width='95%'><div style='margin-left:10px'>
<a href='".DOMEN."/catalog/id".$catrow['id']."'>".$catrow['description']."</a></div></td>";
      $catalog .= "</tr>";
    }

Вот делал в 1 столбик...сейчас попробую переделать

с цифрами получилось в 3 столбика...в дизайн нормально встало)) теперь как бы вывести картинки и под ними надписи

  Ответить  
 
 автор: Рома   (01.08.2009 в 18:56)   письмо автору
 
   для: TetRiska   (01.08.2009 в 18:40)
 


<?php
/*   */


$catalog .= "<tr>"// не должно быть в цикле

$temp=0;
while(
$catrow mysql_fetch_assoc($res))
    {
    
$temp++;
    
$catalog .= "<td>"// открываете ячейку один раз за цикл обязательно!
                                      // хотя нет, не обязательно. Попробуйте

    
$catalog .= "содержимое вашей ячейки, какое хотите";
    
$catalog .= "можете сделать div`ами,";
    
$catalog .= "можете написать новую таблицу, если содер-";
    
$catalog .= "жимое ячейки требует сложной разметки, но ";
    
$catalog .= "тогда это чревато огромным исходным кодом";


    
$catalog .= "</td>"// закрываете ячейку
    
if($temp%3==0$catalog .= "</tr><tr>";
    }

$catalog .= "</tr>"// не должно быть в цикле
?>

  Ответить  
 
 автор: TetRiska   (01.08.2009 в 19:04)   письмо автору
 
   для: Рома   (01.08.2009 в 18:56)
 

благодарю за отличную помощь! остается с разметкой побороться :)

  Ответить  
 
 автор: Николай2357   (01.08.2009 в 20:21)   письмо автору
 
   для: Рома   (01.08.2009 в 18:56)
 

>"тогда это чревато огромным исходным кодом"
Как то мы ту развели демагогию по поводоу пользы от шаблонизаторов. Самым сложным моментом в том подходе, за который я ратовал (а именно против таковых), и которым пользуется топикастер, были именно циклы. Что бы не было огромного исходного кода, можно использовать конструкцию include(); Примерно так:

<?php 
/*   */ 


$catalog .= "<tr>"// не должно быть в цикле 

$temp=0
while(
$catrow mysql_fetch_assoc($res)) 
    { 
    
$temp++; 
    include(
'tpl/row.html');
    if(
$temp%3==0$catalog .= "</tr><tr>"
    } 

$catalog .= "</tr>"// не должно быть в цикле

и вынести верстку в шаблон. Но при больших циклах это не очень удачное решение, так как довольно затратно и непроизводительно подключать файлы в цикле.
Вот такой компромисс имеет место(несколько упрощенно):

<?
    
function get_tpl($tpl,$type 'html')
    {
    if(
file_exists('./tpl/'$tpl .'.'$type))
    return 
file_get_contents('./tpl/'$tpl .'.'$type);
    }    
    
   
    function 
parse_tpl($cont,$data)
    {
        foreach(
$data as $key => $value)
        $
$key $value;

        
preg_match_all("#<\?php(.*?)\?>#uis",$cont,$code);

        
$count count($code[0]);

        if(
$count)
            for(
$i 0$i $count; ++$i)
            {
            
ob_start();
            eval(
$code[1][$i]);
            
$echo ob_get_contents();  
            
ob_end_clean();
            
$cont str_replace($code[0][$i], $echo$cont);
            }    
    
    return 
$cont;
    }

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

<?php 
/*   */ 

$tpl get_tpl('row');
$temp=0
while(
$row mysql_fetch_assoc($res)) 
    { 
    
$temp++; 
    
$catalog .= parse_tpl($tpl,$row);
    if(
$temp%3==0$catalog .= "</tr><tr>"
    } 
include(
'show.html')
?>

Соответственно вывод переменных в шаблонах примерно так:
row.html
<td>
<?php echo $text?>
</td>

show.html
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<?php echo $catalog?>
</tr>
</table>

Два момента.
1. Переменные на выводе должны называться так же, как поля в таблице.
2. Обязательна точка с запятой в этой конструкции <?php echo $catalog; ?>

А дальше можно особо не беспокоится и писать в html файлах даже функции php, коли будет в том нужда.
Скриптик очень скорострельный, так как считывает файл всего единожды.

  Ответить  
Rambler's Top100
вверх

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