Nieuws filter op regio
This commit is contained in:
@@ -13,7 +13,7 @@ SELECT `news`.`id`, `content`.`title`, `content`.`content`, `news`.`podcast` AS
|
|||||||
`news`.`creationdt` AS `published`, `content`.`creator`, `content`.`editingdt` AS `edited`, `content`.`editor`,
|
`news`.`creationdt` AS `published`, `content`.`creator`, `content`.`editingdt` AS `edited`, `content`.`editor`,
|
||||||
`news`.`startdt` AS `starts`, `news`.`enddt` AS `ends`,
|
`news`.`startdt` AS `starts`, `news`.`enddt` AS `ends`,
|
||||||
`content`.`showsource` AS `showsource`, `sources`.`title` AS `source`, `sources`.`url` AS `source_url`,
|
`content`.`showsource` AS `showsource`, `sources`.`title` AS `source`, `sources`.`url` AS `source_url`,
|
||||||
`themes`.`title` AS `theme`, `themes`.`thumbnail` AS `theme_thumbnail`, `regions`.`title` AS `region`
|
`themes`.`title` AS `theme`, `themes`.`thumbnail` AS `theme_thumbnail`, `regions`.`title` AS `region`, `regions`.`slug` as `region_slug`
|
||||||
FROM `news`
|
FROM `news`
|
||||||
LEFT JOIN `news_target_content` AS `content` ON `content`.`news` = `news`.`id`
|
LEFT JOIN `news_target_content` AS `content` ON `content`.`news` = `news`.`id`
|
||||||
LEFT JOIN `news_regions` AS `regions` ON `regions`.`id` = `news`.`region`
|
LEFT JOIN `news_regions` AS `regions` ON `regions`.`id` = `news`.`region`
|
||||||
@@ -38,17 +38,28 @@ QUERY;
|
|||||||
/**
|
/**
|
||||||
* Lijst van alle nieuwsberichten
|
* Lijst van alle nieuwsberichten
|
||||||
*/
|
*/
|
||||||
public function newslist(Request $request) {
|
public function newslist(Request $request, $filter = null) {
|
||||||
$count = (int)$request->get('aantal', 15);
|
$count = (int)$request->get('aantal', 15);
|
||||||
$page = (int)$request->get('pagina', 1);
|
$page = (int)$request->get('pagina', 1);
|
||||||
if($count <= 0 || $page <= 0) {
|
if($count <= 0 || $page <= 0) {
|
||||||
return abort(400);
|
return abort(400);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$filterSql = "";
|
||||||
|
$params = ['category' => self::$NEWS_CATEGORY];
|
||||||
|
if($filter) {
|
||||||
|
foreach($filter as $field => $value) {
|
||||||
|
$paramName = preg_replace('/[^A-Za-z0-9]/', '', $field);
|
||||||
|
$filterSql .= " AND $field = :$paramName";
|
||||||
|
$params[$paramName] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$start = ($page - 1) * $count;
|
$start = ($page - 1) * $count;
|
||||||
$newsItems = app('db')->select(self::$BASE_SQL
|
$newsItems = app('db')->select(self::$BASE_SQL
|
||||||
|
. $filterSql
|
||||||
. ' ORDER BY `published` DESC'
|
. ' ORDER BY `published` DESC'
|
||||||
. ' LIMIT ' . (int)$start . ', ' . (int)$count, ['category' => self::$NEWS_CATEGORY]);
|
. ' LIMIT ' . (int)$start . ', ' . (int)$count, $params);
|
||||||
|
|
||||||
$result = array();
|
$result = array();
|
||||||
foreach($newsItems as $newsItem) {
|
foreach($newsItems as $newsItem) {
|
||||||
@@ -61,6 +72,10 @@ QUERY;
|
|||||||
return response()->json(['page' => $page, 'count' => $count, 'news' => $result]);
|
return response()->json(['page' => $page, 'count' => $count, 'news' => $result]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function regionlist(Request $request, $region) {
|
||||||
|
return $this->newslist($request, ['`regions`.`slug`' => $region]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Agendaberichten ophalen
|
* Agendaberichten ophalen
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ $app->get('/', function () use ($app) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
$app->get('nieuws/overzicht', 'NewsController@newslist' );
|
$app->get('nieuws/overzicht', 'NewsController@newslist' );
|
||||||
|
$app->get('nieuws/regio/{region:[a-z0-9]+}', 'NewsController@regionlist' );
|
||||||
$app->get('nieuws/populair', 'NewsController@popularNews' );
|
$app->get('nieuws/populair', 'NewsController@popularNews' );
|
||||||
$app->get('nieuws/bericht/{id:\d+}', 'NewsController@newsitem' );
|
$app->get('nieuws/bericht/{id:\d+}', 'NewsController@newsitem' );
|
||||||
$app->get('nieuws/regionieuws', 'PodcastController@latestNews' );
|
$app->get('nieuws/regionieuws', 'PodcastController@latestNews' );
|
||||||
|
|||||||
@@ -59,6 +59,12 @@ class NewsItem extends Model {
|
|||||||
$this->keywords = explode(' ', $data->keywords);
|
$this->keywords = explode(' ', $data->keywords);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(is_object($data->region)) {
|
||||||
|
$this->region = new \Model\NewsRegion($data->region->title, $data->region->slug);
|
||||||
|
} else {
|
||||||
|
$this->region = new \Model\NewsRegion($data->region, $data->region_slug);
|
||||||
|
}
|
||||||
|
|
||||||
$images = ($images != null) ? $images
|
$images = ($images != null) ? $images
|
||||||
: (isset($data->images) ? $data->images : null);
|
: (isset($data->images) ? $data->images : null);
|
||||||
if($images) {
|
if($images) {
|
||||||
|
|||||||
@@ -2,6 +2,16 @@
|
|||||||
|
|
||||||
namespace Model;
|
namespace Model;
|
||||||
|
|
||||||
|
class NewsRegion {
|
||||||
|
public $title;
|
||||||
|
public $slug;
|
||||||
|
|
||||||
|
public function __construct($title, $slug = null) {
|
||||||
|
$this->title = $title;
|
||||||
|
$this->slug = $slug ? $slug : strtolower(str_replace(' ', '', $title));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class NewsSource {
|
class NewsSource {
|
||||||
public $title;
|
public $title;
|
||||||
public $url;
|
public $url;
|
||||||
|
|||||||
Reference in New Issue
Block a user