News-Feed abonieren - pro Kategorie
Bei gewählter Kategorie den RSS Feed entsprechend anpassen
Wenn ich eine bestimmte Kategorie gewählt habe, dann möchte ich auch die Möglichkeit haben, nur die Kategorie als RSS-Feed zu bekommen. Allerdings ist das derzeit mit dem T3Blog ohne Eingriff nicht möglich.
Daher habe ich ein paar Zeilen in
t3blog/pi1/widget/rss/class.rss.php
eingefügt.
t3blog/pi1/widget/rss/class.rss.php
/**
* Gets content of requested table
*
* @param string $table: Name of the table
* @param string $rssversion: Version of the rss-feed
* @return xml-rss feed
*/
function getContentResult($table,$rssversion) {
global $TCA;
if ($TCA[$table]) {
$select = $table.'.* ';
if ($this->conf['postItemOrderBy'] == '') {
$orderBy = '';
} else {
$orderBy = ' ORDER BY '.$table.'.'.$this->conf['postItemOrderBy'];
}
// only 15 items in RSS 0.91
$limit = $this->conf['postItemCount'];
if ($this->conf['postItemCount'] == '') {
$limit = '';
}
else {
if ($limit > '15' and $rssversion=='0.91'){
$limit = '15';
}
$limit = ' LIMIT 0,'.$limit;
}
if ($limit == '' && $rssversion=='0.91'){
$limit = ' LIMIT 0,15';
}
$groupBy = '';
$orderBy_limit = ' '.$orderBy.$limit;
$where = ' WHERE '.$table.'.deleted = 0 AND '.$table.'.hidden = 0';
// checks for posts only available on specific fe-users
$fe_groupCheck = $GLOBALS['TSFE']->fe_user->groupData[uid];
if(empty($fe_groupCheck)) {
$where.= ' AND '.$table.'.fe_group = "0"';
} else {
$where.= ' AND ('.$table.'.fe_group = 0 OR '.$table.'.fe_group = '.$fe_groupCheck['1'].')';
}
if($table == 'tx_t3blog_com') {
$where .= ' AND '.$table.'.spam = 0 AND '.$table.'.approved = 1 ';
}
if($table == 'tx_t3blog_post'){
$select .= ', CONCAT(tt_content.header, \' \', tt_content.bodytext) AS text ';
$table .= ' JOIN tt_content ON ( tt_content.irre_parentid = tx_t3blog_post.uid AND tt_content.irre_parenttable = \'tx_t3blog_post\' )';
$where .= ' AND tt_content.hidden = 0 AND tt_content.deleted = 0';
$groupBy .= ' GROUP BY tx_t3blog_post.uid ';
}
if (isset($this->conf['feedAddWhere']) || isset($this->conf['feedAddWhere.'])) {
$where .= ' AND '.$this->cObj->stdWrap($this->conf['feedAddWhere'], $this->conf['feedAddWhere.']).' ';
}
if (isset($this->conf['feedAddTable']) || isset($this->conf['feedAddTable.'])) {
$table .= ' '.$this->cObj->stdWrap($this->conf['feedAddTable'], $this->conf['feedAddTable.']).' ';
}
$query = 'SELECT '.$select.' FROM '.$table.$where.$groupBy.$orderBy_limit;
$res = mysql(TYPO3_db,$query);
return $res;
}
}
* Gets content of requested table
*
* @param string $table: Name of the table
* @param string $rssversion: Version of the rss-feed
* @return xml-rss feed
*/
function getContentResult($table,$rssversion) {
global $TCA;
if ($TCA[$table]) {
$select = $table.'.* ';
if ($this->conf['postItemOrderBy'] == '') {
$orderBy = '';
} else {
$orderBy = ' ORDER BY '.$table.'.'.$this->conf['postItemOrderBy'];
}
// only 15 items in RSS 0.91
$limit = $this->conf['postItemCount'];
if ($this->conf['postItemCount'] == '') {
$limit = '';
}
else {
if ($limit > '15' and $rssversion=='0.91'){
$limit = '15';
}
$limit = ' LIMIT 0,'.$limit;
}
if ($limit == '' && $rssversion=='0.91'){
$limit = ' LIMIT 0,15';
}
$groupBy = '';
$orderBy_limit = ' '.$orderBy.$limit;
$where = ' WHERE '.$table.'.deleted = 0 AND '.$table.'.hidden = 0';
// checks for posts only available on specific fe-users
$fe_groupCheck = $GLOBALS['TSFE']->fe_user->groupData[uid];
if(empty($fe_groupCheck)) {
$where.= ' AND '.$table.'.fe_group = "0"';
} else {
$where.= ' AND ('.$table.'.fe_group = 0 OR '.$table.'.fe_group = '.$fe_groupCheck['1'].')';
}
if($table == 'tx_t3blog_com') {
$where .= ' AND '.$table.'.spam = 0 AND '.$table.'.approved = 1 ';
}
if($table == 'tx_t3blog_post'){
$select .= ', CONCAT(tt_content.header, \' \', tt_content.bodytext) AS text ';
$table .= ' JOIN tt_content ON ( tt_content.irre_parentid = tx_t3blog_post.uid AND tt_content.irre_parenttable = \'tx_t3blog_post\' )';
$where .= ' AND tt_content.hidden = 0 AND tt_content.deleted = 0';
$groupBy .= ' GROUP BY tx_t3blog_post.uid ';
}
if (isset($this->conf['feedAddWhere']) || isset($this->conf['feedAddWhere.'])) {
$where .= ' AND '.$this->cObj->stdWrap($this->conf['feedAddWhere'], $this->conf['feedAddWhere.']).' ';
}
if (isset($this->conf['feedAddTable']) || isset($this->conf['feedAddTable.'])) {
$table .= ' '.$this->cObj->stdWrap($this->conf['feedAddTable'], $this->conf['feedAddTable.']).' ';
}
$query = 'SELECT '.$select.' FROM '.$table.$where.$groupBy.$orderBy_limit;
$res = mysql(TYPO3_db,$query);
return $res;
}
}
TypoScript
# Da die Parameter die per TypoScript übergeben werden, nicht
# noch extra geprüft werden, müssen wir selber dafür sorgen, dass
# keine SQL-Injections vorgenommen werden können.
# Daher lade ich zu Beginn den entsprechenden Get/Post Wert für
# die Kategorie in einen Register und sichere mit "intval" ab, dass
# es sich um eine Zahl handelt.
page.1 = LOAD_REGISTER
page.1.category.data = GPvar:tx_t3blog_pi1|blogList|category
page.1.category.intval = 1
# An dieser Stelle lade ich den Kategorienamen ebenfalls in einen
# Register, damit ich diesen später via {register:category_name}
# ausgeben kann. Nötig ist das nicht - aber vermutlich hilfreich:)
page.1.category_name.cObject = RECORDS
page.1.category_name.cObject {
source.data = register:category
tables = tx_t3blog_cat
conf.tx_t3blog_cat = TEXT
conf.tx_t3blog_cat.field = catname
}
# Diese Änderungen sollen nur greifen,
# falls der RSS-Link aufgerufen wurde und
# eine Kategorie gewählt ist:
[globalVar = GP:tx_t3blog_pi1|rss|value = Comments]&&[globalVar = GP:tx_t3blog_pi1|blogList|category > 0]
xmlnews.10.widget.rss.feedAddWhere >
xmlnews.10.widget.rss.feedAddTable >
# Durch die hinzugefügten TypoScript Eigenschaften "feedAddTable"
# und "FeedAddWhere" können wir ganz einfach die entsprechenden
# SQL-Querys anpassen:
xmlnews.10.widget.rss.feedAddWhere = tx_t3blog_post_cat_mm.uid_foreign = {register:category}
xmlnews.10.widget.rss.feedAddWhere.insertData = 1
xmlnews.10.widget.rss.feedAddTable = LEFT JOIN tx_t3blog_post_cat_mm ON (tx_t3blog_post_cat_mm.uid_local = tx_t3blog_com.fk_post )
[end]
# noch extra geprüft werden, müssen wir selber dafür sorgen, dass
# keine SQL-Injections vorgenommen werden können.
# Daher lade ich zu Beginn den entsprechenden Get/Post Wert für
# die Kategorie in einen Register und sichere mit "intval" ab, dass
# es sich um eine Zahl handelt.
page.1 = LOAD_REGISTER
page.1.category.data = GPvar:tx_t3blog_pi1|blogList|category
page.1.category.intval = 1
# An dieser Stelle lade ich den Kategorienamen ebenfalls in einen
# Register, damit ich diesen später via {register:category_name}
# ausgeben kann. Nötig ist das nicht - aber vermutlich hilfreich:)
page.1.category_name.cObject = RECORDS
page.1.category_name.cObject {
source.data = register:category
tables = tx_t3blog_cat
conf.tx_t3blog_cat = TEXT
conf.tx_t3blog_cat.field = catname
}
# Diese Änderungen sollen nur greifen,
# falls der RSS-Link aufgerufen wurde und
# eine Kategorie gewählt ist:
[globalVar = GP:tx_t3blog_pi1|rss|value = Comments]&&[globalVar = GP:tx_t3blog_pi1|blogList|category > 0]
xmlnews.10.widget.rss.feedAddWhere >
xmlnews.10.widget.rss.feedAddTable >
# Durch die hinzugefügten TypoScript Eigenschaften "feedAddTable"
# und "FeedAddWhere" können wir ganz einfach die entsprechenden
# SQL-Querys anpassen:
xmlnews.10.widget.rss.feedAddWhere = tx_t3blog_post_cat_mm.uid_foreign = {register:category}
xmlnews.10.widget.rss.feedAddWhere.insertData = 1
xmlnews.10.widget.rss.feedAddTable = LEFT JOIN tx_t3blog_post_cat_mm ON (tx_t3blog_post_cat_mm.uid_local = tx_t3blog_com.fk_post )
[end]
forge.typo3.org
Schade, dass die Extension nicht bei forge.typo3.org entwickelt wird. Es wäre schön solche kleinen Änderungen einfach und unkompliziert zurückgeben zu können.
- 0 Kommentare




Mein Kommentar