Прошу помощи в написании вывода в 2 столбца

Mad Dogg

Новичок
Прошу помощи в написании вывода в 2 столбца

Всем здрасьте и с прошедшим НГ!
У меня вопрос. Возможно он и дурацкий, и может быть даже задавался уже на этом форуме. Но все же рискну задать его.

Есть у меня страничка, на ней менюшка горизонтальная, под самым потолком.

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

Код такой
PHP:
if (isset($_GET["price_select"])) {
    $n_cat=$_GET["price_select"];
    $query="SELECT n_cat, name, has_child, n_parent FROM categories WHERE n_parent=".$n_cat." AND n_cat not in (2, 184, 192, 243, 273, 342) ORDER BY name";
    $result=mssql_query($query);

    echo "<div id=\"price_list\">";
    $counter=0;
    while($row=mssql_fetch_array($result)) {
        if($row["has_child"] != 1) {
        $counter++;
        echo "<p /><a href=catalog.php?n_cat=$row[n_cat]&name=$row[name]>".$row["name"]."</a>";
        } else {
            echo "<div><hr><p />$row[name]";
            $sql=mssql_query("SELECT n_cat, name, has_child, n_parent FROM categories WHERE n_parent=".$row["n_cat"]." ORDER BY name");
            while($row=mssql_fetch_array($sql)) {
                echo "<p /><a href=catalog.php?n_cat=$row[n_cat]&name=$row[name]>$row[name]</a>";
            }
            echo "<hr></div>";
        }
    }
    echo "</div>";
}
Понимаю, что можно сделать или дивами или таблицами. Таблицами, я так понимаю проще будет. Но организм, измученный "нарзаном" не позволяет в полной мере осознать логику происходящего.

Господа форумчане, может подскажете как сделать такую фишку ??

-~{}~ 04.01.09 16:22:

ЗЫ список из 74х строк

-~{}~ 04.01.09 16:44:

ЗЗЫ еще раз извините что спрашиваю :-[
 

Фанат

oncle terrible
Команда форума
обизвинялся уже весь

какая проблема, выведя 37 строк, перейти на новую колонку?
 

Mad Dogg

Новичок
я так и хочу сделать, но моск расслаблен, и никак решение не приходит. Оно очевидно, но не сейчас. А я прошу подсказки.

-~{}~ 04.01.09 16:55:

кстати. в воскресенье после 3х дней пития работать не слишком весело ))

-~{}~ 04.01.09 17:00:

Забыл упомянуть! Меню состоит из нескольких кнопок. Каждая выводит свое количество строк. Все те же ссылки. Конечно можно дойти до 37 и вывести новый тр, но это не верно для остальных пунктов меню. Там ведь нет 37 записей. Где то их вообще 2.
 

Фанат

oncle terrible
Команда форума
ну вот определись сначала, как тебе надо сделать 2 колонки, сформулируй задачу, а потом приходи
 

Mad Dogg

Новичок
надо сделать 2 колонки. Сначала заполняется одна колонка. В том случае, если количество записей достигает половины общего количесва записей и записей не больше, скажем 6ти, то рождается вторая колонка, которая заполняется по тому же принципу. Что то такое нужно.
 

Beavis

Banned
Mad Dogg
заранее считай сколько должно быть колонок и вставляй внутрь <tr> соответствующее количество <td>
 

x-yuri

Новичок
во-первых вынеси доступ к бд например перед выводом html: т.е. сначала извлекаешь из бд необходимую информацию, а потом выводишь html

во-вторых тебе поможет http://ua.php.net/manual/ru/function.array-chunk.php , которым тоже стоит воспользоваться до вывода html
 

Mad Dogg

Новичок
В итоге все сделал как обычно по своему и получилось )
правда там 2 цикла. один выводит первую таблицу с половиной записей а второй вторую ) строчек много, но после более года не программирования еще ниче )

код такой получился:

PHP:
    echo "<div class='price_format1'><table width='100%'>";
    for ($i=0; $i<=$rows+5 && $row=@mssql_fetch_array($result); $i++) {
        if($row["has_child"] != 1) {
                echo "<tr>
                    <td class='td1' onmouseover=\"this.style.cursor='hand';\" onclick='location.href = \"catalog.php?n_cat=$row[n_cat]&back=$n_cat\";'><a href=catalog.php?n_cat=$row[n_cat]&back=$n_cat>".$row["name"]."</a></td>
                    </tr>";
                    } else {
                        $sql=@mssql_query("SELECT n_cat, name, has_child, n_parent FROM categories WHERE n_parent=".$row["n_cat"]." ORDER BY name");
                        while($row=@mssql_fetch_array($sql)) {
                        echo "<tr>
                                <td class='td1' onmouseover=\"this.style.cursor='hand';\" onclick='location.href = \"catalog.php?n_cat=$row[n_cat]&back=$n_cat\";'><a href=catalog.php?n_cat=$row[n_cat]&back=$n_cat>$row[name]</a></td>
                                </tr>";
                    }
        }
    }
    echo "</table></div><div class='price_format2'><table width='100%'>";
    for ($i=$rows+1; $i>$rows && $i<=$num_rows && $row=@mssql_fetch_array($result); $i++) {
        if($row["has_child"] != 1) {
                echo "<tr>
                    <td class='td1' onmouseover=\"this.style.cursor='hand';\" onclick='location.href = \"catalog.php?n_cat=$row[n_cat]&back=$n_cat\";'><a href=catalog.php?n_cat=$row[n_cat]&back=$n_cat>".$row["name"]."</a></td>
                    </tr>";
                    } else {
                        $sql=@mssql_query("SELECT n_cat, name, has_child, n_parent FROM categories WHERE n_parent=".$row["n_cat"]." ORDER BY name");
                        while($row=@mssql_fetch_array($sql)) {
                        echo "<tr>
                                <td class='td1' onmouseover=\"this.style.cursor='hand';\" onclick='location.href = \"catalog.php?n_cat=$row[n_cat]&back=$n_cat\";'><a href=catalog.php?n_cat=$row[n_cat]&back=$n_cat>$row[name]</a></td>
                                </tr>";
                    }
                
                }
    }
    echo "</table></div>";
вот такая вот каша вышла, но съедобная )))
Есть какие предложения по изменению ?

-~{}~ 10.01.09 01:07:

блин. забыл начало впихнуть
$num_rows=@mssql_num_rows($result);
$num_cols=2;
$rows=ceil($num_rows/$num_cols);
 

x-yuri

Новичок
ну ты можешь дальше с собой продолжать разговаривать ;-) а можешь почитать, что тебе советовали. В общем выбор за тобой))
 

Sokil.Dmytro

Новичок
менюхи круто делать на <ul><li> тегах
заворачиваешь два столбца в <ul> и через css делаешь float:left;

вродь должно сработать :)
 

Mad Dogg

Новичок
Sokil.Dmytro
Кстати, неплохая идея с менюхами )
Ярослав
Год назад было явно лучше чем сейчас. Как вижу свои старые исходники глаза вот такие о_О становятся.

ЗЫ. Попробуйте на год или более бросить что либо программировать вообще, а потом внезапно начните снова ) Будет прикольно )

-~{}~ 11.01.09 10:22:

В итоге родилось вот это:
PHP:
    $query="SELECT n_cat, name, has_child, n_parent FROM categories WHERE n_parent=".$n_cat." AND n_cat not in (2, 184, 192, 243, 273, 342) ORDER BY name";
    $result=@mssql_query($query);
    //Это я пытаюсь вывод в 2 столбика организвать. хз что получится, но надеюсь что получится хоть что то.
    while ($arr=mssql_fetch_array($result)) {
        if($arr["has_child"] != 1) {
            $cats[]=$arr["name"];
        } else {
            $sql=@mssql_query("SELECT n_cat, name, has_child, n_parent FROM categories WHERE n_parent=".$arr["n_cat"]." ORDER BY name");
            while($row=@mssql_fetch_array($sql)) {
                $cats[]=$row["name"];
            }
        }
    }
    $columns = 2; 
    $formatted_cats=array_chunk($cats, ceil(count($cats) / $columns));
    $count_first=count($formatted_cats[0]);
    $count_second=count($formatted_cats[1]);
    echo "<div style='float:left; position:relative; width:50%'><ul>";
    for ($i=0; $i<=$count_first-1; $i++) {
        echo "<li>".$formatted_cats[0][$i]."</li>";
    }
    echo "</ul></div>";
    echo "<div style='float:left; position:relative; width:50%'><ul>";
    for ($i=0; $i<=$count_second-1; $i++) {
        echo "<li>".$formatted_cats[1][$i]."</li>";
    }
    echo "</ul></div>";
Это решение занимает явно меньше строчек кода и работает лучше и быстрее )
Есть какие-нибудь замечания по поводу этого куска кода ?
 

Sokil.Dmytro

Новичок
есть способ грузить деревья без рекурсии одним запросом. http://phpclub.ru/faq/Tree?v=w5u

а зачем еще и див?
 

Mad Dogg

Новичок
Sokil.Dmytro
Див чтобы 2 половинки ровно клались на страничке. там букаф много.
 

x-yuri

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

можно избавится от двух последовательных циклов
 

Mad Dogg

Новичок
x-yuri
Нефига без двух циклов не получается в 2 столбика. Все в ряд ложится. Но очень вероятно, что я чего то не знаю.
 

x-yuri

Новичок
это скорее всего потому, что у тебя отступы не дают поместится в 2 столбца. Попробуй сделать без дивов и убери второе width: 50%
 
Сверху