Вообщем ситуация в том, чтобы в блоке вывести только те новости, которые принадлежат к определенной категории. Уже долго сижу над этим, но не могу сообразить. Вот несколько ссылок на мой код, чтобы немного прояснить ситуацию. Ссылка на Блок с категориями и отображением всех Item, Controller, ItemsModel, CategoryModel, Mysql таблица категорий, Mysql таблица Items, Smarty шаблон.
Заранее спасибо!
Для удобства добавляю код в сам вопрос:
MainController:
class MainController implements \Interfaces\ControllersInterface
{
public function index()
{
global $smarty;
$news = CategoriesModel::getAll();
$items = [];
foreach ($news as $new){
$id = $new['category_id'];
$items**[$id]**[] = ItemsModel::getItemsByCategoryId($id);
}
$smarty->assign('items', $items);
$smarty->assign('news', $news);
$smarty->display('main.tpl');
}
}
CategoriesModel:
class CategoriesModel{
public static function getAll()
{
$query = "SELECT * FROM categories ORDER BY weight DESC";
$db = DB::getConnection();
return $db->query($query)->fetch_all(MYSQLI_ASSOC);
}
public static function getCategoryId()
{
$query = "SELECT category_id FROM categories";
$db = DB::getConnection();
return $db->query($query)->fetch_all(MYSQLI_ASSOC);
}
public static function getItemsByCategoryId($id)
{
$query = "SELECT * FROM items WHERE category_id = '$id'";
$db = DB::getConnection();
return $db->query($query)->fetch_all(MYSQLI_ASSOC);
}
}
ItemsModel:
class ItemsModel{
public $name;
public $description;
public $category_id;
public static function itemsList()
{
$db = DB::getConnection();
$query = "SELECT * FROM items";
return $db->query($query)->fetch_all(MYSQLI_ASSOC);
}
public static function getSingleItem($id)
{
$db = DB::getConnection();
$query = "SELECT * FROM items WHERE id = '$id'";
return $db->query($query)->fetch_all(MYSQLI_ASSOC);
}
public static function getItemsByCategoryId($id)
{
$query = "SELECT * FROM items WHERE category_id = '$id'";
$db = DB::getConnection();
return $db->query($query)->fetch_all(MYSQLI_ASSOC);
}
}
Шаблон где происходит вывод:
<div class="col-md-3">
<div class="label label-info"><a href="/news">Show all latest news</a></div><br /><br />
{foreach $news as $article}
<div class="panel panel-info">
<div class="panel-heading">{$article["name"]}</div>
<div class="panel-body">
{foreach $items*[$article["category_id"]* as $it}
{foreach $it as $i}
{$i["name"]}
{/foreach}
{/foreach}
</div>
</div>
{/foreach}
</div>
Проиндексируйте $items
по id категории, заполняя массив таким образом: $items[$id] = ItemsModel::getItemsByCategoryId($id);
. А в шаблоне, внутри цикла {foreach $news as $article}
обходите не все $items
, а только $items[$article['id']]
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я использую Elasticsearch для поиска заведений по названиюМне нужно отсортировать результаты по количеству совпадений (_score) и расстоянию до координат...
Есть задача: нужно проверить на предмет наличия значений в ряде переменныхЕсть ли какой-то "человеческий" способ или каждую нужно перебирать...
Пытаюсь без сторонних плагинов сделать лайкиТак чтобы нажал один раз - "+1" лайк, нажал второй раз - "-1" лайк