Во-первых, извините, если заголовок запутан! Я работаю над блоком, который определяет, как должны отображаться списки последних сообщений (иногда определяемых датой) в категории. В базе данных каждая категория имеет набор "тип", который определяет, является ли div, в котором он находится, является небольшим или большим.
Я могу получить результаты для отображения, но каждая ссылка в списке имеет свой собственный div, а не содержится в одной "основной" категории div.
Более короткое объяснение: База данных извлекает результаты из таблицы категорий и таблицы сообщений, как вы можете видеть в запросе. Затем цикл запускается так, что окна категорий и ссылки в них могут создаваться динамически. Проблема в том, что divs, которые должны размещать список ссылок, вместо этого обертывают каждую отдельную ссылку, а не желаемый набор.
Хотя нижеприведенный код показывает только два "типа", я планировал добавить в будущем больше.
Вот код
<?
require("classes/Database.class.php");
$db = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
$time = $_REQUEST['time'];
$db->connect();
$sql = "SELECT
cm.id,
cm.title AS cmtitle,
cm.sectionid,
cm.type AS cmtype,
cd.id,
cd.time,
cd.link,
cd.title,
cd.description,
cd.sectionid AS sectionid
FROM c_main AS cm
JOIN c_data AS cd ON cd.sectionid=cm.sectionid
WHERE cd.sectionid=cm.sectionid AND time = '".$time."' ORDER by id ASC";
$rows = $db->query($sql);
while($record = $db->fetch_array($rows)){
//determine what div to use by checking "type"
if ($record['cmtype'] == 'large') {
?>
<div class="large" >
<?
} elseif ($record['cmtype'] == 'small') {
?>
<div class="small">
<?
}
for($x =0; $x <= $db->affected_rows; ++$x)
{
if ($record['cmtype'] == 'small') {
echo $record['title'].'<br/>';
} else {
echo $record['title'].'<br/>'.$record['description'];
}
break;
}
echo '</div>';
}
$db->close();
?>
В основном я пытаюсь сделать это вот так:
/-------------------\
| Category Title |
| -relevant link |
| -relevant link |
\____________________/
/-------------------\
| Category Title |
| -relevant link |
| -relevant link |
\____________________/
.... and so on for each subsequent category
И не это (как это выводится)
/-------------\
\relevant link/
-------------
/-------------\
\relevant link/
-------------
etc.
Вот оболочка mysql, которую я сейчас использую, если она имеет значение http://ricocheting.com/scripts/php_mysql_wrapper.php
ваш код будет эхом div для каждой строки, это ваша проблема/вопрос.
Мое предложение состоит в том, чтобы создать два запроса: выбрать все ссылки типа A и второй запрос, выбрав все ссылки типа B (WHERE type = '…'
)
тогда вам придется распечатать начальный тег вашего первого div:
echo '<div class="large">';
после этого зациклируйте свой результат и выведите ссылки:
while(($record = $db->fetch_assoc($rows)) !== FALSE){
echo htmlspecialchars($record['title']),'<br/>';
}
закройте свой div:
echo '</div>';
теперь вы можете начать свою вторую категорию, ту же игру, те же правила:
~~~
другой способ, как и другие, чтобы упорядочить ваш результат по типу, затем по id (ORDER BY type, id
), а затем проверить изменение типа строк:
$currenttype = '';
while(($record = $db->fetch_assoc($rows)) !== FALSE) {
$currenttype = $record['cmtype'];
echo '<div class="',htmlspecialchars($record['cmtype']),'">';
while($record['cmtype'] == $currenttype
&& ($record = $db->fetch_assoc($rows)) !== FALSE) {
// output link according to your type:
echo htmlspecialchars($record['title']);
}
echo '</div>';
}
Я предполагаю, что это то, чего вы хотели добиться в первую очередь
Если вам нужно только 2 divs, один большой и один маленький, вы должны сделать ORDER BY cmtype
, а затем вам нужно будет только создать div, когда тип изменится или это первый тип.
Возможно, я ошибаюсь в понимании вашего вопроса, но вы пытаетесь добавить все релевантную ссылку в один DIV, а затем проверьте свой php-результат html (browser- > view source)
Может быть, я полностью ошибаюсь, но если вы хотите отобразить элементы, сгруппированные по их типу, я думаю, вам следует заказать их по типу сразу, чтобы порядок элементов был правильным, когда вы начинаете выводить HTML-код?
Если вы уверены в своем содержимом таблицы, вы можете использовать:
echo "<div class='" . $record['cmtype'] . "'>";