Попытка получить форумы для отображения всех подкатегорий с категорией

Вот так выглядят мои форумы:
http://prntscr.com/73oicl

Но, как вы видите, обе категории говорят «сообщество», чего не должно быть.
Подкатегория «Тест» должна быть прямо под «Объявления» & Обновления »подкатегории.

Я знаю, в чем проблема, но я не знаю, как ее исправить.

    function getForums($id) {
$currentHost = "http://$_SERVER[HTTP_HOST]";
$query = "SELECT * FROM forums, categories";
try {
global $db;
$stmt = $db->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll();
foreach($result as $row) {
$category_title = $row['category_title'];
$forum_id = $row['forum_id'];
$forum_title = $row['forum_title'];
$forum_topic_count = $row['forum_topic_count'];
$forum_post_count = $row['forum_post_count'];
$forum_last_topic_id = $row['forum_last_topic_id'];
$forum_last_topic = $row['forum_last_topic'];
$forum_last_date = $row['forum_last_date'];
$forum_last_user = $row['forum_last_user'];
$fixed_last_topic = substr($forum_last_topic,0,25).'...';
echo '<div class="forum pleft">
<div class="forum-header">
<span class="header-text">'.$category_title.'</span>
</div>
<table>
<tr>
<td class="title"><a href="'.$currentHost.'/forums/view-forum/index.php?cid='.$category_id.'&fid='.$forum_id.'">'.$forum_title.'</a></td>
<td class="topics">'.$forum_topic_count.'</td>
<td class="posts">'.$forum_post_count.'</td>
<td class="lastpost"><a href="'.$currentHost.'/forums/view-thread/index.php?cid='.$id.'&fid='.$forum_id.'&tid='.forum_last_topic_id.'">'.$fixed_last_topic.'</a> by <a href="'.$currentHost.'/users/index.php?username='.$forum_last_user.'">'.$forum_last_user.'</a> at '.$forum_last_date.'</td>
</tr>
</table>
</div>';
}
}
catch(PDOException $ex) {
die("error");
}
}

Как вы можете видеть, для каждого результата будет создан новый форум div, что означает, что все подкатегории, заданные для этой категории, не будут вместе, и каждая подкатегория создаст новый форум, который я не хочу
Есть ли способ, с помощью которого я мог бы взорвать эхо, чтобы сделать так, чтобы, если 2 или более подкатегории были в 1 категории, это не производило новый div?

4

Решение

Я написал это без тестирования, так что вы можете проверить на наличие ошибок. Возможно, это не самый эффективный способ, но он должен работать.

function getForums($id) {
$currentHost = "http://$_SERVER[HTTP_HOST]";
$query = "SELECT * FROM forums, categories ORDER BY categories ASC"; /* Order by categories to arrange same categories together */
try {
global $db;
$stmt = $db->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll();
$numrows = $stmt->fetch(PDO::FETCH_NUM); /* Check for total rows of records */

$count = 0;
$currentCategory = ""; // Declare container

foreach($result as $row) {
$category_title = $row['category_title'];
$forum_id = $row['forum_id'];
$forum_title = $row['forum_title'];
$forum_topic_count = $row['forum_topic_count'];
$forum_post_count = $row['forum_post_count'];
$forum_last_topic_id = $row['forum_last_topic_id'];
$forum_last_topic = $row['forum_last_topic'];
$forum_last_date = $row['forum_last_date'];
$forum_last_user = $row['forum_last_user'];
$fixed_last_topic = substr($forum_last_topic,0,25).'...';

/* If currentCat is empty OR is not similar to previous */
if($currentCategory == "" || $currentCategory != $category_title){
/* If currentcat is not empty AND not similar to previous, close */
if($currentCategory != "" && $currentCategory != $category_title){
echo '</table></div>';
}

echo '<div class="forum pleft">
<div class="forum-header">
<span class="header-text">'.$category_title.'</span>
</div>
<table>
<tr>
<td class="title"><a href="'.$currentHost.'/forums/view-forum/index.php?cid='.$category_id.'&fid='.$forum_id.'">'.$forum_title.'</a></td>
<td class="topics">'.$forum_topic_count.'</td>
<td class="posts">'.$forum_post_count.'</td>
<td class="lastpost"><a href="'.$currentHost.'/forums/view-thread/index.php?cid='.$id.'&fid='.$forum_id.'&tid='.forum_last_topic_id.'">'.$fixed_last_topic.'</a> by <a href="'.$currentHost.'/users/index.php?username='.$forum_last_user.'">'.$forum_last_user.'</a> at '.$forum_last_date.'</td>
</tr>';
$count++;

/* Check if its last row, If yes, end */
if($count == $numrows){
echo '</table></div>';
}

$currentCategory = $category_title; /*Set category title */
}
/* If next row belong to the same category, If yes, continue */
else if($currentCategory == $category_title){
echo '<tr>
<td class="title"><a href="'.$currentHost.'/forums/view-forum/index.php?cid='.$category_id.'&fid='.$forum_id.'">'.$forum_title.'</a></td>
<td class="topics">'.$forum_topic_count.'</td>
<td class="posts">'.$forum_post_count.'</td>
<td class="lastpost"><a href="'.$currentHost.'/forums/view-thread/index.php?cid='.$id.'&fid='.$forum_id.'&tid='.forum_last_topic_id.'">'.$fixed_last_topic.'</a> by <a href="'.$currentHost.'/users/index.php?username='.$forum_last_user.'">'.$forum_last_user.'</a> at '.$forum_last_date.'</td>
</tr>';
$count++;

/* Check if its last row, If yes, end */
if($count == $numrows){
echo '</table></div>';
}
}
}
}
catch(PDOException $ex) {
die("error");
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]