Я уверен, что это очень простая проблема, и мне кажется, что я не могу разобраться. Я хочу отобразить список ссылок, сгруппированных на экране в соответствующие категории. Я использую bootstrap, и идея состоит в том, чтобы каждая категория ссылок выводилась в своем собственном столбце со ссылками под заголовком:
Например:
--- Cat 1 ------- Cat 2 ---
--- Ссылка 1 ------ Ссылка 3 ---
--- Ссылка 2 ------ Ссылка 4 ---
У меня есть две таблицы:
- Первые «ссылки» имеют столбцы linkId, categoryId, linkTitle, linkDescription, linkUrl et c.
- Вторые 'linkcategories' содержат столбцы categoryId, categoryTitle, categoryDescription et c.
. Я использую PDO и использую следующее для получить данные из базы данных:
public function getLinkCategories() {
$this->db->query('SELECT categoryTitle, linkTitle, linkDescription, linkUrl
FROM link
INNER JOIN linkcategories ON linkCategories.categoryId = link.categoryId
WHERE link.marked_for_delete != 1');
$results = $this->db->resultSetGrouped();
return $results;
}
Затем я использую приведенный ниже код для передачи результатов назад, в частности, я прочитал, что я должен использовать PDO :: FETCH_GROUP, чтобы я мог возвращать строки во вложенный массив где индексы будут уникальными значениями из первого столбца, а значения будут массивами, подобными тем, которые возвращаются регулярным fetchAll (). Таким образом, используя:
//get results set as array of objects - grouped
public function resultSetGrouped() {
$this->execute();
return $this->statement->fetchAll(PDO::FETCH_GROUP);
}
Моя страница загружена со следующим, и я передаю данные в представление:
public function index() {
//get the links
$links = $this->linkModel->getLinkCategories();
$pageData = ['title' => 'Links • BM Intranet'];
$data = ['pageData' => $pageData, 'linkCategories' => $links];
$this->view('links/index', $data);
}
Я думаю, что я должен иметь возможность использовать foreach l oop отображать результаты на странице, но не могу придумать, как правильно назвать части. Это то, что возвращается в $ data.
Array
(
[pageData] => Array
(
[title] => Links • Intranet
)
[linkCategories] => Array
(
[Unsorted] => Array //Unsorted is the category name
(
[0] => Array
(
[linkTitle] => a link title
[0] => a link title
[linkDescription] => This is an example of a link you can store. This is the external website
[1] => This is an example of a link you can store. This is the external website
[linkUrl] => https://www.asbcdef.co.uk/
[2] => https://www.abcdef.co.uk/
)
[1] => Array
(
[linkTitle] => People
[0] => People
[linkDescription] => This is another link
[1] => This is another link
[linkUrl] => https://www.efgjk.co.uk/people/
[2] => https://www.efgjk.co.uk/people/
)
)
)
)
Итак, я застрял на части, возвращая приведенные выше результаты и отображая их на странице, как ...
- - Cat 1 ------- Cat 2 ---
--- Ссылка 1 ------ Ссылка 3 ---
--- Ссылка 2 ------ Ссылка 4 ---
У меня пока ...
foreach($data as $link) : ?>
<div class="col-lg-6 col-md-12 mb-5">
<div class="row">
<div class="col lead border-bottom mb-2">
<i class="fas fa-folder text-secondary"></i> <?php echo $link->linkCategories; ?>
</div>
</div>
<div class="row">
<div class="col">
<a target="_blank" class="text-danger" href="<?php echo $category->url; ?>"><?php echo $category->linkTitle; ?></a>
<span class="float-right text-secondary">Hits: <?php echo $category->hits; ?></span>
<p mt-0>
<?php echo $category->linkDescription; ?>
</p>
</div>
</div>
Но это не так работа с неверными свойствами.
Похоже, я могу использовать $ link [0] ['linkTitle'], чтобы получить данные из массива - так что я могу обдумать это. Что я не знаю, как это сделать сейчас, так это получить название категории (в данном случае это равно - Несортировано) и иметь ссылки, связанные с ним, под