changes the db query and adopts the layout of the Vue component to show the correct betreff and content of the news

This commit is contained in:
SimonGschnell
2024-06-26 13:21:32 +02:00
parent f546554f87
commit 478adb740e
5 changed files with 45 additions and 55 deletions
+23 -25
View File
@@ -109,35 +109,33 @@ class Cms extends FHCAPI_Controller
public function news()
{
$this->load->model('content/news_model', 'NewsModel');
$limit = $this->input->get('limit',TRUE);
// return early if the limit parameter is missing or is not greater than 0
if(!isset($limit) || $limit > 0)
$this->terminateWithError("API parameters are missing", self::ERROR_TYPE_GENERAL);
$this->load->model('content/news_model', 'NewsModel');
$news_content_ids = $this->NewsModel->getNewsContentIDs($limit);
$news_metadata = $this->NewsModel->getAll($limit);
$this->addMeta("content_ids",$news_content_ids);
$news_content = array();
// return early if the limit parameter is missing or is not greater than 0
if(!isset($limit) || $limit < 1)
$this->terminateWithError("API parameters are missing", self::ERROR_TYPE_GENERAL);
if(isError($news_content_ids))
$this->terminateWithError(getError($news_content_ids), self::ERROR_TYPE_GENERAL);
if(isError($news_metadata))
$this->terminateWithError(getError($news_metadata), self::ERROR_TYPE_GENERAL);
foreach(getData($news_content_ids) as $content_id){
$news_content[] = $this->fetchContent($content_id->content_id);
//query the news
$news = $this->NewsModel->getAll($limit);
//get the data or terminate with error
$news = $this->getDataOrTerminateWithError($news);
// check if any news are there
if($news === NULL){
$this->terminateWithError("No news content has been found");
}
$this->terminateWithSuccess(["news_content" =>$news_content, "news_metadata"=>getData($news_metadata)]);
// collect the content of the news
foreach($news as $news_element){
$this->addMeta("asdfs",$news_element->content_id);
$news_element->content_obj = $this->fetchContent($news_element->content_id);
}
$this->terminateWithSuccess($news);
}
+7
View File
@@ -103,6 +103,12 @@ class CmsLib
$XML = new DOMDocument();
$XML->loadXML($content->content);
if($content->titel){
$betreff = $content->titel;
}else{
$betreff = $XML->getElementsByTagName('betreff');
}
$xsltemplate = new DOMDocument();
$xsltemplate->loadXML($template->xslt_xhtml_c4);
@@ -115,6 +121,7 @@ class CmsLib
$transformed_content = str_replace('dms.php', APP_ROOT . 'cms/dms.php', $transformed_content);
return success([
"betreff"=>$betreff,
"type"=>$content->template_kurzbz,
"content"=>$transformed_content
]);
+6 -2
View File
@@ -20,8 +20,12 @@ class News_model extends DB_Model
public function getAll($limit = null)
{
$this->addJoin("campus.tbl_content","content_id");
return $this->loadWhere('
text IS NOT NULL
return $this->execReadOnlyQuery('
SELECT *
FROM campus.tbl_news
JOIN campus.tbl_content content ON content.content_id = campus.tbl_news.content_id
WHERE
--text IS NOT NULL AND
datum <= NOW() AND (datum_bis IS NULL OR datum_bis >= now()::date)
ORDER BY datum DESC
LIMIT ' . $this->escape($limit)
+2 -3
View File
@@ -11,14 +11,13 @@ export default {
}
);
},
news(limit, metadata=false) {
news(limit) {
return this.$fhcApi.get(
FHC_JS_DATA_STORAGE_OBJECT.app_root +
FHC_JS_DATA_STORAGE_OBJECT.ci_router +
"/api/frontend/v1/Cms/news",
{
limit: limit,
metadata: metadata,
limit: limit
}
);
},
+7 -25
View File
@@ -28,30 +28,13 @@ export default {
}
},
created(){
this.$fhcApi.factory.cms.news(MAX_LOADED_NEWS,this.width === 1?true:false)
console.log(MAX_LOADED_NEWS,"this are the max news");
this.$fhcApi.factory.cms.news(MAX_LOADED_NEWS)
.then(res => { this.allNewsList = res.data })
.catch(err => { console.error('ERROR: ', err.response.data) });
this.$emit('setConfig', false);
},
mounted(){
this.$nextTick(() =>{
console.log(this.$refs.htmlContent,"this is the html content");
/* //console.log(this.$refs.htmlContent,"this is the refs content");
let newsItems = document.getElementsByClassName("news-list");
console.log(newsItems,"i am printing something");
for(let item of newsItems){
//console.log(item,"this is the item");
item.style.maxHeight = "100px";
item.style.overflow = "scroll";
} */
});
},
methods: {
setSingleNews(singleNews){
this.singleNews = singleNews;
@@ -70,7 +53,7 @@ export default {
<div v-for="news in newsList" :key="news.id" class="mt-2">
<div class="card">
<div class=" card-body">
<a href="#newsModal" class="stretched-link" @click="setSingleNews(news)">{{ news.betreff }}</a><br>
<a href="#newsModal" class="stretched-link" @click="setSingleNews(news)">{{ news.content_obj.betreff?news.content_obj.betreff:'Kein Betreff vorhanden' }}</a><br>
<span class="small text-muted">{{ formatDateTime(news.insertamum) }}</span>
</div>
</div>
@@ -79,7 +62,7 @@ export default {
<div v-else-if="width > 1 && height === 1" class="h-100" :class="'row row-cols-' + width">
<div class="h-100" v-for="news in newsList" :key="news.id">
<div class="news-content h-100" :style="'--news-widget-height: '+height" ref="htmlContent" ><div v-html="news.content"></div></div>
<div class="news-content h-100" :style="'--news-widget-height: '+height" ref="htmlContent" v-html="news.content_obj.content"></div>
</div>
@@ -87,7 +70,7 @@ export default {
<div v-else class="h-100" :class="'row row-cols-' + width">
<div class="h-100" v-for="news in newsList" :key="news.id">
<div class="news-content h-100" :style="'--news-widget-height: '+height" ref="htmlContent" v-html="news.content"></div>
<div class="news-content h-100" :style="'--news-widget-height: '+height" ref="htmlContent" v-html="news.content_obj.content"></div>
</div>
</div>
@@ -101,9 +84,8 @@ export default {
<div class="row">
<div class="col-5"><img :src="placeHolderImgURL" class="img-fluid rounded-start"></div>
<div class="col-7 d-flex align-items-end">
<p>{{ singleNews.betreff }}<br><small class="text-muted">{{ formatDateTime(singleNews.insertamum) }}</small></p>
<p>{{ singleNews?.content_obj?.betreff?singleNews?.content_obj?.betreff:'Kein Betreff vorhanden' }}<br><small class="text-muted">{{ formatDateTime(singleNews.insertamum) }}</small></p>
</div>
</div>
</template>
<template #default>{{ singleNews.text }}</template>
</BsModal>