Seite 2 von 2

Re: Neue Beiträge splitten

Verfasst: 02.10.2013 08:28
von dieter99
Ich habe einen LösungsAnsatz gefunden:

Datei: search_results.html

Code: Alles auswählen

<!-- BEGIN searchresults -->
			<li class="row<!-- IF searchresults.S_ROW_COUNT is even --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
				<dl class="icon" style="background-image: url({searchresults.TOPIC_FOLDER_IMG_SRC}); background-repeat: no-repeat;">
					<dt <!-- IF searchresults.TOPIC_ICON_IMG -->style="background-image: url({T_ICONS_PATH}{searchresults.TOPIC_ICON_IMG}); background-repeat: no-repeat;"<!-- ENDIF -->>
						<!-- IF searchresults.S_UNREAD_TOPIC --><a href="{searchresults.U_NEWEST_POST}">{NEWEST_POST_IMG}</a> <!-- ENDIF -->
						<a href="{searchresults.U_VIEW_TOPIC}" class="topictitle">{searchresults.TOPIC_TITLE}</a> {searchresults.ATTACH_ICON_IMG}
						<!-- IF searchresults.S_TOPIC_UNAPPROVED or searchresults.S_POSTS_UNAPPROVED --><a href="{searchresults.U_MCP_QUEUE}">{searchresults.UNAPPROVED_IMG}</a> <!-- ENDIF -->
						<!-- IF searchresults.S_TOPIC_REPORTED --><a href="{searchresults.U_MCP_REPORT}">{REPORTED_IMG}</a><!-- ENDIF --><br />
						<!-- IF searchresults.PAGINATION --><strong class="pagination"><span>{searchresults.PAGINATION}</span></strong><!-- ENDIF -->
						{L_POST_BY_AUTHOR} {searchresults.TOPIC_AUTHOR_FULL} &raquo; {searchresults.FIRST_POST_TIME} 
						<!-- IF not searchresults.S_TOPIC_GLOBAL -->{L_IN} <a href="{searchresults.U_VIEW_FORUM}" style="color:#3067A4;">{searchresults.FORUM_TITLE}</a><!-- ELSE --> ({L_GLOBAL})<!-- ENDIF -->
					</dt>
					<dd class="posts">{searchresults.TOPIC_REPLIES}</dd>
					<dd class="views">{searchresults.TOPIC_VIEWS}</dd>
					<dd class="lastpost"><span>
						{L_POST_BY_AUTHOR} {searchresults.LAST_POST_AUTHOR_FULL}
						<!-- IF not S_IS_BOT --><a href="{searchresults.U_LAST_POST}">{LAST_POST_IMG}</a> <!-- ENDIF --><br />{searchresults.LAST_POST_TIME}<br /> </span>
					</dd>
				</dl>
			</li>
		<!-- END searchresults -->
Wenn ich diesen Code einfach doppelt einfüge, werden die neuen Beiträge logischerweise auch doppelt ausgegeben.

Nun muss ich bei beiden Codeschnipseln (ich nenne es jetzt Code 1 und Code 2) nur noch eine If-Abfrage einbauen:

Code 1: "IF ELTERN-FORUM_ID 35"

Code 2: "IF ELTERN-FORUM_ID 70"

Die Schwierigkeit besteht nun darin, auf die Eltern-Forum ID Zugriff zu bekommen. Zu finden ist diese Angabe in der mySql Tabelle phpbb_forums, Spalte "forum_parents". Dort steht z.B. der Eintrag a:1:{i:35;a:2:{i:0;s:17:"Testeintrag";i:1;i:0;}}
Wie bekomme ich in der Datei search_results.html Zugriff auf den mySQL Eintrag 35? (35 ist in meinem Beispiel die Eltern-Forum-ID).

Re: Neue Beiträge splitten

Verfasst: 02.10.2013 09:37
von Miriam

Re: Neue Beiträge splitten

Verfasst: 03.10.2013 02:12
von Nuramon
Muss es zwingend das Eltern-Forum sein?
In der phpbb_topics wird das Forum gespeichert, in dem sich das Thema befindet. Das kannst du ganz leicht als Template-Variable übergeben, falls es nicht sogar schon da ist, und dann mit <!-- IF searchresults.FORUM_ID == 1 or searchresults.FORUM_ID == 2 or searchresults.FORUM_ID == 3 --> die notwendigen Foren rausfiltern.
In der zweiten Anzeige machst du dasselbe, halt nur mit dem verneinten IF-Statement. In meinem Beispiel <!-- IF searchresults.FORUM_ID != 1 and searchresults.FORUM_ID != 2 and searchresults.FORUM_ID == 3 -->.

Das sollte schon ausreichen.

EDIT://
Hab gerade nachgeguckt, FORUM_ID existiert schon, sollte also so funktionieren.

Re: Neue Beiträge splitten

Verfasst: 06.10.2013 12:31
von dieter99
Nuramon hat geschrieben:Muss es zwingend das Eltern-Forum sein?
Ja, es muss zwingend das Eltern-Forum sein.
Miriam hat geschrieben:Hinweis: http://php.net/manual/de/function.serialize.php
Das es sich beim Datenbankinhalt um ein serialisiertes Array handelt, war mir schon klar. Doch in welcher Datei muss ich welchen Code einfügen, damit ich den Datenbankinhalt überhaupt auslesen kann? Und wo übergebe ich den Inhalt schließlich an das Template?

Re: Neue Beiträge splitten

Verfasst: 06.10.2013 13:08
von Miriam
Mit diesem serialisierten Wert kommst Du nicht weiter. Jedenfalls nicht dahin, wo Du hin möchtest.
Ansatz:
  • Finde in der search.php
    • Code: Alles auswählen

                      $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.forum_id, p.topic_id, p.post_time' : 't.forum_id, t.topic_id, t.topic_last_post_time';
    tausche aus gegen:
    • Code: Alles auswählen

                      // $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time';
                      $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.forum_id, p.topic_id, p.post_time' : 't.forum_id, t.topic_id, t.topic_last_post_time';

Re: Neue Beiträge splitten

Verfasst: 06.10.2013 13:11
von Nuramon
dieter99 hat geschrieben:Ja, es muss zwingend das Eltern-Forum sein.
Macht das ganze drölf mal komplizierter. Kommen so oft neue Foren hinzu zu deinem Eltern-Forum? Sonst ist das händisch eintragen der Zahlen bei weitem die bessere Lösung, geht viel schneller und macht genau das gleiche.
dieter99 hat geschrieben:Das es sich beim Datenbankinhalt um ein serialisiertes Array handelt, war mir schon klar. Doch in welcher Datei muss ich welchen Code einfügen, damit ich den Datenbankinhalt überhaupt auslesen kann? Und wo übergebe ich den Inhalt schließlich an das Template?
Eingefügt werden muss der Code wohl in die search.php, je nachdem, ob du global die gültigen Forum-Ids ins Template schreiben müchtest bei den globalen Variablen, sonst wenn du es für jedes Ergebnis einzeln machen möchtest, bei den template_vars 'searchresults'.

Re: Neue Beiträge splitten

Verfasst: 09.10.2013 06:42
von dieter99
Miriam hat geschrieben:Mit diesem serialisierten Wert kommst Du nicht weiter. Jedenfalls nicht dahin, wo Du hin möchtest.
Ansatz:
  • Finde in der search.php
    • Code: Alles auswählen

                      $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.forum_id, p.topic_id, p.post_time' : 't.forum_id, t.topic_id, t.topic_last_post_time'; 
    tausche aus gegen:
    • Code: Alles auswählen

                      // $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time';
                      $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.forum_id, p.topic_id, p.post_time' : 't.forum_id, t.topic_id, t.topic_last_post_time'; 
Du hast im Endeffekt zweimal den gleichen Code gepostet.

Re: Neue Beiträge splitten

Verfasst: 09.10.2013 08:05
von Miriam
Oops,

der zu findende Code ist der, der im zweiten Codesegment auskommentiert wurde.
Das hast Du doch schon gesehen, gell?

Re: Neue Beiträge splitten

Verfasst: 10.10.2013 09:21
von dieter99
dieter99 hat geschrieben:Ich habe einen LösungsAnsatz gefunden:

Datei: search_results.html

Code: Alles auswählen

<!-- BEGIN searchresults -->
			<li class="row<!-- IF searchresults.S_ROW_COUNT is even --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
				<dl class="icon" style="background-image: url({searchresults.TOPIC_FOLDER_IMG_SRC}); background-repeat: no-repeat;">
					<dt <!-- IF searchresults.TOPIC_ICON_IMG -->style="background-image: url({T_ICONS_PATH}{searchresults.TOPIC_ICON_IMG}); background-repeat: no-repeat;"<!-- ENDIF -->>
						<!-- IF searchresults.S_UNREAD_TOPIC --><a href="{searchresults.U_NEWEST_POST}">{NEWEST_POST_IMG}</a> <!-- ENDIF -->
						<a href="{searchresults.U_VIEW_TOPIC}" class="topictitle">{searchresults.TOPIC_TITLE}</a> {searchresults.ATTACH_ICON_IMG}
						<!-- IF searchresults.S_TOPIC_UNAPPROVED or searchresults.S_POSTS_UNAPPROVED --><a href="{searchresults.U_MCP_QUEUE}">{searchresults.UNAPPROVED_IMG}</a> <!-- ENDIF -->
						<!-- IF searchresults.S_TOPIC_REPORTED --><a href="{searchresults.U_MCP_REPORT}">{REPORTED_IMG}</a><!-- ENDIF --><br />
						<!-- IF searchresults.PAGINATION --><strong class="pagination"><span>{searchresults.PAGINATION}</span></strong><!-- ENDIF -->
						{L_POST_BY_AUTHOR} {searchresults.TOPIC_AUTHOR_FULL} &raquo; {searchresults.FIRST_POST_TIME} 
						<!-- IF not searchresults.S_TOPIC_GLOBAL -->{L_IN} <a href="{searchresults.U_VIEW_FORUM}" style="color:#3067A4;">{searchresults.FORUM_TITLE}</a><!-- ELSE --> ({L_GLOBAL})<!-- ENDIF -->
					</dt>
					<dd class="posts">{searchresults.TOPIC_REPLIES}</dd>
					<dd class="views">{searchresults.TOPIC_VIEWS}</dd>
					<dd class="lastpost"><span>
						{L_POST_BY_AUTHOR} {searchresults.LAST_POST_AUTHOR_FULL}
						<!-- IF not S_IS_BOT --><a href="{searchresults.U_LAST_POST}">{LAST_POST_IMG}</a> <!-- ENDIF --><br />{searchresults.LAST_POST_TIME}<br /> </span>
					</dd>
				</dl>
			</li>
		<!-- END searchresults -->
Wenn ich diesen Code einfach doppelt einfüge, werden die neuen Beiträge logischerweise auch doppelt ausgegeben.

Nun muss ich bei beiden Codeschnipseln (ich nenne es jetzt Code 1 und Code 2) nur noch eine If-Abfrage einbauen:

Code 1: "IF ELTERN-FORUM_ID 35"

Code 2: "IF ELTERN-FORUM_ID 70"

Die Schwierigkeit besteht nun darin, auf die Eltern-Forum ID Zugriff zu bekommen. Zu finden ist diese Angabe in der mySql Tabelle phpbb_forums, Spalte "forum_parents". Dort steht z.B. der Eintrag a:1:{i:35;a:2:{i:0;s:17:"Testeintrag";i:1;i:0;}}
Wie bekomme ich in der Datei search_results.html Zugriff auf den mySQL Eintrag 35? (35 ist in meinem Beispiel die Eltern-Forum-ID).
Die von mir gepostete Idee hat einen großen Nachteil:

Nehmen wir mal an, ich lasse unter "neue Beiträge" erst die Beiträge der Kategrie1 ausgeben, und danach alle Beiträge der Kategorie 2. In der Kategorie 1 sind 50 neue Beiträge vorhanden, d.h. es sind so viele Beiträge das die Beiträge der Kategorie 2 sehr weit unten angeordnet sind und daher im ersten Moment nicht sichtbar sind (da im ersten Moment nicht auf den Bildschirm zu sehen). Wenn nun der User x alle 50 Beiträge der Kategorie 1 gelesen hat, und zu einem späteren Zeitpunkt schreibt jemand einen Beitrag zu Kategorie 2, dann taucht dieser Beitrag unter "neue Beiträge" nicht oben auf, da zunächst die 50 gelesenen Beiträge von Kategorie 1 aufgelistet werden. Womöglich werden dann die neuen Beiträge von Kategorie 2 übersehen. Hat jemand einen anderen Lösungsansatz?

Re: Neue Beiträge splitten

Verfasst: 10.10.2013 15:50
von Nuramon
Warum willst du die überhaupt trennen?