tt_news Hook Best_Rated [Gelöst]

  • scripper scripper
    R2-D2
    0 x
    91 Beiträge
    0 Hilfreiche Beiträge
    29. 12. 2009, 19:02

    Hallo zusammen ich schreib gerade eine TT_News Hook um die News nach den Bewertungen zu sortieren. Basierend auf der Extension [i]"ratings"[/i]. Soweit auch kein Problem. Habe mich an der Most_Popular extension orientiert und ein neuen Modus per ext_localconf eingebunde etc. Nun müsste ich die SQL Abfrage die die News ausliest entsprechend anpassen.
    Leider seh ich in der Ext. "Most_Viewed" nur wie die OrderBY Klausel angepasst wird. Ich müsste aber mehr oder weniger den ganzen Query anpassen.

    Hier mal den Query der Implementiert werden müsste:
    [HTML]SELECT * , (T.rating / T.vote_count) AS Bewertung
    FROM `tt_news` AS N, `tx_ratings_data` AS T
    WHERE N.uid = SUBSTR( T.reference, 9 )
    ORDER BY Bewertung DESC[/HTML]

    Im Moment kann ich die OrderBy Klausel mit dieser Funktion bearbeiten:

    1. function processSelectConfHook(&$pObj, &$selectConf) {
    2. /* @var $pObj tx_ttnews */
    3. if ($pObj->theCode == 'BEST_RATED') {
    4. $oldOrderBy = trim($selectConf['orderBy']);
    5. if (!$oldOrderBy) {
    6. $oldOrderBy = trim($pObj->config['orderBy']);
    7. if ($oldOrderBy && trim($this->config['ascDesc'])) {
    8. $oldOrderBy .= ' ' . $this->config['ascDesc'];
    9. }
    10. }
    11. // tt_news overrides our selection of orderBy, so we have to tweak that again
    12. $pObj->config['orderBy'] = $selectConf['orderBy'] = 'tx_ncttnewsmostpopular_counter DESC' . ($oldOrderBy ? ',' . $oldOrderBy : '');
    13. $this->config['ascDesc'] = '';
    14. if ($selectConf['limit'] == '' && $pObj->config['limit']) {
    15. $selectConf['limit'] = $pObj->config['limit'];
    16. }
    17. }
    18. return $selectConf;
    19. }

    Ich denke man kann hier auch die ganze Abfrage verändern. Steig aber nicht ganz durch wie. Viell. kann mit einer von euch hier helfen oder hat eine Idee.

    Danke im Vorraus


  • 1
  • scripper scripper
    R2-D2
    0 x
    91 Beiträge
    0 Hilfreiche Beiträge
    30. 12. 2009, 13:28

    hab das ganze jetzt einfach mal mit den entsprechenden Variablen im Array eingetragen aber ganz so leicht gehts nicht:

    1. $pObj->config['selectFields'] = $selectConf['selectFields'] = 'tt_news.*, tt_news_cat_mm.*, (tx_ratings_data.rating / tx_ratings_data.vote_count) AS Bewertung';
    2. $pObj->config['fromTable'] = $selectConf['fromTable'] = 'tt_news,tt_news_cat_mm ,tx_ratings_data';
    3. $pObj->config['where'] = $selectConf['where'] = $selectConf['where'].' AND CONCAT( "tt_news_", tt_news.uid ) LIKE tx_ratings_data.reference';
    4. $pObj->config['orderBy'] = $selectConf['orderBy'] = = 'Bewertung';

    Wenn ich mir ein Debug Array ausgeben lass komm folgendes:

    [HTML]pidInList 10
    where 1=1 AND tt_news.sys_language_uid IN (0,-1) AND tt_news.pid > 0 AND CONCAT( "tt_news_", tt_news.uid ) LIKE tx_ratings_data.reference
    orderBy Bewertung
    selectFields tt_news.*, tt_news_cat_mm.*, (tx_ratings_data.rating / tx_ratings_data.vote_count) AS Bewertung
    fromTable tt_news,tt_news_cat_mm ,tx_ratings_data
    limit 12[/HTML]

    Aber es werden keine Elemente ausgelesen ... Hat jemand ne Idee was hier fehlt / falsch ist ??

  • scripper scripper
    R2-D2
    0 x
    91 Beiträge
    0 Hilfreiche Beiträge
    31. 12. 2009, 11:37

    Hallo zusammen ...

    ich hab das ganze nun ein wenig anderst gelöst. Ich habe die tt_news Tabelle um ein Feld erweitert in dem immer die aktuelle Bewertung abgespeichert wird. Wenn nun das Modus BEST_RATED ausgewähl wird, werden die Elemente einfach nach diesem Feld geordnet.

    Dazu musste ich aber noch die Extens RATINGS bearbeiten, dass bei jeder Bewertung das aktuelle Rating in die tt_news Tabelle geschrieben wird.

  • fatkap fatkap
    Jar Jar Binks
    0 x
    1 Beiträge
    0 Hilfreiche Beiträge
    22. 06. 2010, 10:23

    Hallo Scripper,

    ich stehe vor dem selben Problem wie du es hier in diesem Thread schilderst.

    habe ein "tt_news" System mit der Bewertungs-Extension "ratings", nun möchte ich es meinen Nutzern ermöglichen die bewerteten News nach dem User-Rating sortieren zu lassen. Leider bieteten beide extension, wie du ja bereits festgellt hast diese auswahl nicht.

    bei der suche mit google bin ich auf deinen thread gestossen und finde deinen lösungsansatz sehr vielversprechend, leider krieg ich ihn nicht ganz umgesetzt.

    Über einen kleinen Gedankenanstoß, wie du dein Problem letztenlich gelöst hast würde ich mich freuen.

    Mit der extension Kickstarter kann ich umgehen, ebenso sind meine PHP programierkenntnisse ausgereift, leider fehlt es mir aber am nötigen wissen im bezug auf die API´s von TYPO3, tt_news und ratings um mein vorhaben zu realisieren.

  • 1