Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   не могу создать заголовок для колонки списка (https://javascript.ru/forum/xhtml-html-css/59239-ne-mogu-sozdat-zagolovok-dlya-kolonki-spiska.html)

deniskutovskiy 02.11.2015 14:37

не могу создать заголовок для колонки списка
 
Есть список в 2 колонки, который генерируется циклами (выводящими данные из БД). Формально это 2 списка, разбитые по разным дивам:
<div id="subs" class="subs">
                        <div class="col col1">
                            <ul>
	                            
	                            <?php
		                            // НАЧИНАЕМ ЦИКЛ, ВЫВОДИЩИЙ ИЗ БД СПИСОК БЛЮД (ОТДЕЛЬНО ДЛЯ КАЖДОГО ЗАПРОСА, ЧТОБЫ СФОРМИРОВАТЬ 2 РЯДА) //
		                            // ССЫЛКИ ССЫЛАЮТСЯ НА ПРИСВОЕННЫЙ БЛОКАМ id, КОТОРЫЙ БЕРЕМ ИЗ ПОЛЯ index_num В БД" //
		                            while ($row11 = mysql_fetch_array($query11)) {
		                            ?>
		                            
                                <li><a href="menu.php#<?php print($row11["index_num"]); ?>"> <?php print($row11["name"]); ?></a></li>
                                
                                <?php } ?>
                                
                            </ul>
                        </div>
                        <div class="col col2">
                            <ul>
	                            
                                <?php
		                            while ($row12 = mysql_fetch_array($query12)) {
		                            ?>
		                            
                                <li><a href="menu.php#<?php print($row12["index_num"]); ?>"> <?php print($row12["name"]); ?></a></li>
                                
                                <?php } ?>
                                
                            </ul>
                        </div>
                    </div>

Хочу сделать так, чтобы у каждой колонки было что-то вроде заголовка.
Решение сделать так:
...
<div class="col col1">
    <div>Заголовок 1</div>
                            <ul>
...

или так
...
<div class="col col1">
                            <ul>
                               <li>Заголовок 1</li>
...

ничего не дает (заголовок не выводится).
Таким образом нужно, чтобы между верхушкой списка и первым его пунктом отображался заголовок колонки (списка). Не понимаю, почему ни один из вариантов выше не работает. Очевидно, век живи — век учись.
Прошу помощи с решением задачи. Надеюсь, все доходчиво объяснил.

laimas 02.11.2015 15:43

Цитата:

Сообщение от deniskutovskiy
ОТДЕЛЬНО ДЛЯ КАЖДОГО ЗАПРОСА, ЧТОБЫ СФОРМИРОВАТЬ 2 РЯДА

То есть ради вывода списков вы делаете два отдельных запроса к одной и той же таблице?

deniskutovskiy 02.11.2015 16:46

Цитата:

Сообщение от laimas (Сообщение 394141)
То есть ради вывода списков вы делаете два отдельных запроса к одной и той же таблице?

Да, у меня за вывод каждого ряда списка (список, как вы поняли, идет в 2 колонки) из одной таблицы БД отвечает отдельный запрос с LIMIT'ом, типа:
$query11 = mysql_query("SELECT * FROM Dishes ORDER BY index_num LIMIT 0, 8") or die("Не могу получить первый список!"); // ВЫБИРАЕМ ПЕРВЫЙ РЯД //
$query12 = mysql_query("SELECT * FROM Dishes ORDER BY index_num LIMIT 8, 8") or die("Не могу получить второй список!"); // ВЫБИРАЕМ ВТОРОЙ РЯД //

Но это издержки моего уровня знакомства с mysql и немного — специфика логики «меню».
Также это не имеет отношения к задаче с заголовками. По крайней мере хочется в это верить. Тут есть что сказать? Может я не понимаю какую-то «базовую логику» списков в html?

P.S.: Однако совет по mysql я тоже мимо ушей не пропустил бы;)

laimas 02.11.2015 17:27

Получайте так, одним запросом

$q = mysql_query("SELECT * FROM Dishes ORDER BY index_num LIMIT 0, 16") or die("Не могу получить первый список!");


Все дальнейшее можно разложить как угодно. И вообще, перебирайтесь на PDO.

Что за поле содержит заголовок или это произвольный текст не получаемый из базы?

deniskutovskiy 02.11.2015 17:48

Цитата:

Сообщение от laimas (Сообщение 394170)
Получайте так, одним запросом

$q = mysql_query("SELECT * FROM Dishes ORDER BY index_num LIMIT 0, 16") or die("Не могу получить первый список!");


Все дальнейшее можно разложить как угодно. И вообще, перебирайтесь на PDO.

Что за поле содержит заголовок или это произвольный текст не получаемый из базы?

1) Как разложить этот запрос в html на 2 части? Представить результат селекта как массив и пустить так же 2 цикла но теперь каждый из них пилит половину массива?

2) Что такое PDO? Что-то типа контекста БД для PHP? Типа «code first»?

3) Да, заголовок — просто произвольный текст, прописывается ручками в html ровно 1 раз над каждым рядом списка.

laimas 02.11.2015 18:51

Цитата:

Сообщение от deniskutovskiy
Что такое PDO? Что-то типа контекста БД для PHP?

Уровень абстракции - http://fi2.php.net/manual/ru/book.pdo.php

Тогда получаем запросом готовый набор делим его на два массива и выводим: array_chunk ($db->('SLECT .... ')->fethAll(PDO::FETCH_ASSOC))

Если заголовок произвольный текст, то разбить вывод 16 записей на два списка, это итерацию цикла делить по модулю 8, и если возвращает 0, то выводим заголовок, если текст заголовков разный, значит и для них указываем свой счетчик, число от 0 до N увеличивающееся при делении на модулю 8 и нулевому значению деления, и по нему как по индексу получаем из массива заголовок.

deniskutovskiy 02.11.2015 20:53

Цитата:

Сообщение от laimas (Сообщение 394194)
Уровень абстракции - http://fi2.php.net/manual/ru/book.pdo.php

Тогда получаем запросом готовый набор делим его на два массива и выводим: array_chunk ($db->('SLECT .... ')->fethAll(PDO::FETCH_ASSOC))

Если заголовок произвольный текст, то разбить вывод 16 записей на два списка, это итерацию цикла делить по модулю 8, и если возвращает 0, то выводим заголовок, если текст заголовков разный, значит и для них указываем свой счетчик, число от 0 до N увеличивающееся при делении на модулю 8 и нулевому значению деления, и по нему как по индексу получаем из массива заголовок.

В итоге, не могли бы вы резюмировать, где в дом-модели (вышепредставленного html-кода) будет находиться заголовок, чтобы его было видно над первым элементом списка? Оформление его как первого элемента этого списка не дает результатов (странно). Может что-то не так с css (понимаю, что без кода сложно сказать)?
Дело в том, что цикл не вызывает проблем, ровно как и sql-запрос (он вызывает вопросы только эстетические, разобранные нами). Проблема в том, что попытки добавить произвольный заголовок в html не дают результата, никакого.

Похоже придется решить задачу добавлением фонового изображения и пэддингом сверху. *noobmode*

laimas 02.11.2015 21:56

Цитата:

Сообщение от deniskutovskiy
В итоге, не могли бы вы резюмировать, где в дом-модели

Это уж как вам надо - можно перед списками UL вставлять Hx, либо в первом элементе списка UL -> LI -> Hx... А то что заголовок не виден вообще, значит неверно вставляете. Дергать же дважды базу из-за своих проблем, это грех.

Например, пусть заголовки разные и выводятся в начале списков, а запрос возвращает 16 строк (только не используйте mysql_fetch_array, вам ведь не нужны два набора):

$head = ['Head 1', 'Head 2']; $n = -1; $rows = 8;
while($r = mysql_fetch_object($query)) {
    if(!(++$n % $rows)) $ul .= ($n ? '</ul>' : null) . '<h3>' . $head[$n/$rows] . '</h3><ul>';
    $ul .= '<li><a href="menu.php#' . $r->index_num . '">' . htmlspecialchars($r->name) . '</a></li>';
}
echo $ul . '</ul>';


Часовой пояс GMT +3, время: 16:31.