Page 1 of 1

(gelöst) FEUListing

Posted: Thu Apr 24, 2008 3:12 pm
by Helmi
Ich habe FEU Listing installiert und es auch versuchsweise anzeigen lassen. Mir gefällt es jedoch nicht, wie es die User anzeigt. Ich weiß zwar, wo das Template ist, um das zu ändern, aber ich weiß nicht, wie ich das dort formulieren muß, um die Useranzeige zu bekommen, die ich haben möchte. Kann mir da jemand weiterhelfen?

Ich möchte folgendes: nur den Benutzernamen ausgeben.

Schön wäre es noch, wenn man zu dem Benutzernamen einen Link machen könnte, wo man quasi eine PN schicken kann, also eine Email, ohne daß die Emailadresse des Benutzernamens für die anderen sichtbar ist. Sowas gibt es ja in Foren. Geht das hiermit auch zu erstellen?

Re: FEUListing

Posted: Fri Apr 25, 2008 10:48 am
by thoms
Helmi wrote: Ich habe FEU Listing installiert und es auch versuchsweise anzeigen lassen. Mir gefällt es jedoch nicht, wie es die User anzeigt. Ich weiß zwar, wo das Template ist, um das zu ändern, aber ich weiß nicht, wie ich das dort formulieren muß, um die Useranzeige zu bekommen, die ich haben möchte. Kann mir da jemand weiterhelfen?
Ich möchte folgendes: nur den Benutzernamen ausgeben.
Das aktuelle Standard-Template sieht so aus:

Code: Select all

<!-- Start FrontEndUserListing Display Template -->
<table width="100%" border="1">
{foreach from=$items item=entry}
<tr>
<td>{$entry.first_name} {$entry.last_name}<br>
<a href="mailto:{$entry.Email}">{$entry.last_name}</a><br></td>
<td>{$entry.home_phone}<br> {$entry.cell_phone}</td>
<td>{$entry.icq}</td>
<td>{$entry.ip}</td>
</tr>		
{/foreach}
</table>		
<!-- End FrontEndUserListing Display Template -->';		
Die Feldnamen sind eigentlich selbsterklärend, wenn Du nur den Benutzernamen willst, lösche doch einfach alles andere. Der Rest ist HTML.
Helmi wrote: Schön wäre es noch, wenn man zu dem Benutzernamen einen Link machen könnte, wo man quasi eine PN schicken kann, also eine Email, ohne daß die Emailadresse des Benutzernamens für die anderen sichtbar ist. Sowas gibt es ja in Foren. Geht das hiermit auch zu erstellen?
Nein, zumindest nicht auf einfache Weise.

Thomas

Re: FEUListing

Posted: Fri Apr 25, 2008 11:58 am
by Helmi
In dieser Liste ist aber der Benutzername nicht mit drin. Das ist das Problem. Es zeigt Vor- und Nachnamen an, aber nicht den Nicknamen.

Re: FEUListing

Posted: Fri Apr 25, 2008 4:13 pm
by NaN
Helmi wrote: In dieser Liste ist aber der Benutzername nicht mit drin. Das ist das Problem. Es zeigt Vor- und Nachnamen an, aber nicht den Nicknamen.
Yepp, ich weiß zwar nicht warum daran keiner gedacht hat, aber das FeUserListing-Modul kann aktuell keine Benutzenamen ausgeben.
Ich habe dazu das Modul etwas modifiziert.
Das Problem liegt eigentlich nur in einer "simplen" Änderung der Datenbankabfrage.
Ich weiß nicht, ob meine Lösung perfekt ist, aber bei mir funktionierts.

Hier die Anleitung:

Öffne Datei modules/FrontEndUserListing/FrontEndUserListing.module.php.
In den Zeilen 273-290 steht folgendes:

Code: Select all


		$entryarray = array();
		$query = "SELECT p.*, b.groupid FROM "
		.cms_db_prefix()."module_feusers_properties p, "
		.cms_db_prefix()."module_feusers_belongs b, "
		.cms_db_prefix()."module_feusers_groups g "
		."WHERE b.userid = p.userid "
		."AND b.groupid = g.id";
/*		if (isset($grpid))
		{
			$query .= " AND g.id=" . $grpid;
		}
*/		if (isset($grouplistNumbers))
		{
		   $query .= " AND g.id in ($grouplistNumbers[0]";
		   foreach ($grouplistNumbers as $grpid) {
		      $query .= ",".$grpid;
		   }
		   $query .= ")";
		}


Die kannst Du komlett löschen (oder besser auskommentieren) und durch folgende Zeilen ersetzen:

Code: Select all


# added by NaN:
# My query (to get the username into the $data array; maybe there is some easier way; feel free for any sugestions):
$query2 = '';
$query = "SELECT ".cms_db_prefix()."module_feusers_users.username, 
		".cms_db_prefix()."module_feusers_belongs.userid, 
		".cms_db_prefix()."module_feusers_properties.title, 
		".cms_db_prefix()."module_feusers_properties.data, 
		".cms_db_prefix()."module_feusers_belongs.groupid, 
		".cms_db_prefix()."module_feusers_properties.id 
		FROM ".cms_db_prefix()."module_feusers_users 
		LEFT OUTER JOIN ".cms_db_prefix()."module_feusers_belongs 
		ON ".cms_db_prefix()."module_feusers_belongs.userid = ".cms_db_prefix()."module_feusers_users.id 
		AND (";
$i=0;
foreach ($grouplistNumbers as $grpid) 
{
	$i++;
	$query2 .= cms_db_prefix()."module_feusers_belongs.groupid = '". $grpid ."'";
	if($i<sizeof($grouplistNumbers))
		$query2 .= " OR ";
}
		
$query .= $query2.") LEFT OUTER JOIN ".cms_db_prefix()."module_feusers_properties 
		ON ".cms_db_prefix()."module_feusers_properties.userid = ".cms_db_prefix()."module_feusers_belongs.userid 
		AND (".$query2.")";

if (isset($grouplistNumbers))
{
	$query .= " AND ".cms_db_prefix()."module_feusers_belongs.groupid in ($grouplistNumbers[0]";
	foreach ($grouplistNumbers as $grpid) 
	{
		$query .= ",".$grpid;
	}
	$query .= ")";
}

$query .= "INNER JOIN ".cms_db_prefix()."module_feusers_grouppropmap ON ".cms_db_prefix()."module_feusers_grouppropmap.group_id = '". $grpid ."' 
ORDER BY ".cms_db_prefix()."module_feusers_grouppropmap.sort_key";


Das Template sieht bei mir dann folgendermaßen aus:

Code: Select all


<table class="userlist">
	<thead>
		<tr>
			<th>{$listheader.username}</th>
		</tr>
	</thead>
	<tbody>
{foreach from=$items item=entry}
		<tr class="row{$entry.rowclass}">
{foreach from=$entry item=prop key=key}
{if $key=='username'}
			<td><a href="{$entry.detlink}">{$prop}</a></td>
{/if}
{/foreach}
		</tr>
{/foreach}
	</tbody>
</table>

Hoffe das hilft Dir weiter.

Re: FEUListing

Posted: Fri Apr 25, 2008 6:19 pm
by Helmi
ich hab das so gemacht, aber es zeigt überhaupt nichts an.

Also, 1. habe ich die genannten Zeilen durch den neuen Code ersetzt
2. habe ich das ins Summary Template geschrieben:







{$listheader.username}



{foreach from=$items item=entry}

{foreach from=$entry item=prop key=key}
{if $key=='username'}
{$prop}
{/if}
{/foreach}

{/foreach}





Und 3. habe ich das Modul in einer Seite so aufgerufen:
{cms_module module=FrontEndUserListing group=Mitglied}

Es zeigt dann nur eine weiße Seite an, gar keine Ausgabe.

Re: FEUListing

Posted: Fri Apr 25, 2008 9:41 pm
by NaN
Hm,

eventuell hab ich da noch etwas anderes geändert.
Ich schau da nochmal nach.

Gibt es die User-Gruppe "Mitglied" überhaupt bzw. sind dort auch User drin?

Re: FEUListing

Posted: Sat Apr 26, 2008 10:43 am
by Helmi
ja, die gibt es, und es sind auch User drin. Mit demselben Aufruf hatte ich vorher ja auch die ganze Liste aufgerufen. Nur zeigt es dann all die privaten Daten an wie realer Name, Emailadresse usw., und das will ich nicht. Es sollen nur die Benutzernamen angezeigt werden.

Re: FEUListing

Posted: Sat Apr 26, 2008 9:27 pm
by NaN
Also das Einzige, was ich noch vergessen hatte war:
In der Zeile 268 (nach der foreach-Schleife) folgendes einfügen

$listheader['username'] = $feusers->lang('username');

Und in Zeile 308 (vor $this->debugarray($data, "Processed user data");) noch das hier

$rowclass=1;
foreach($data as $k=>$v)
{
$data[$k]['rowclass']=$rowclass;
$rowclass=($rowclass==2?1:2);
}
$this->smarty->assign('row',1);


Aber das dürfte eigentlich nicht der Grund dafür sein.
Helmi wrote: Es zeigt dann nur eine weiße Seite an, gar keine Ausgabe.
Dann prüfe nochmal den Quellcode.
Sowas passiert meistens dann, wenn ein Modul fehlerhaft ist.
Da ich das Modul mit diesen Änderungen ohne Probleme im Einsatz habe, glaube ich nicht, dass es an meinen Änderungen liegt. Selbst wenn mein Code Fehler enthält, sollte ja wenigstens Deine Seite angezeigt werden. (schlimmstenfalls ohne User-Liste)
Evtl. die Datei nochmal hochladen.
Und den Zwischenspeicher löschen.
Ich habs gerade nochmal an einer "frischen" lokalen Version getestet.
Bei mir funktionierts.
Welche Version von FrontEndUserListing verwendest Du denn?
Und welche CMS Version?

Re: FEUListing

Posted: Sun Apr 27, 2008 3:17 pm
by Helmi
ich habe die neue CMS-Version 1.2.4 und von FEUListing 0.4-beta-2.

Habe das Original nochmals neu installiert und fange die Schritte noch einmal von vorne an. Vielleicht klappt es ja dann...

Re: FEUListing

Posted: Sun Apr 27, 2008 3:24 pm
by Helmi
jetzt zeigt es an:

Warning: Invalid argument supplied for foreach()

Hab ich da irgendwo was falsch eingetragen?

PS: er meldet die Zeile 329 als Problem an, und die enthält:

foreach($data as $k=>$v)

Unter der Fehlermeldung heißt es:

Benutzername:

und dann folgen Bindestriche (genau die Anzahl der Mitglieder), aber keine Namen

Re: FEUListing

Posted: Sun Apr 27, 2008 5:39 pm
by NaN
Ah, schon wieder was vergessen. Ich sollte meine Änderungen besser kommentieren  ::)
(Meine Zeilenangaben beziehen sich übrigens immer auf das Original-Script. Könnte sein, dass Du da außerdem etwas in die falsche Zeile eingefügt hast.)

In Zeile 520 (in der Funktion function SortUsers()) steht wieder eine foreach-Schleife. Dort einfach folgendes hinzufügen:

// create the user array from the raw data
foreach ($rawdata as $row)
{
$userid = $row['userid']; // user id of the current data bit
$users[$userid][$row['title']] = $row['data'];
$users[$userid]['username'] = $row['username']; # <- added by NaN
}


Falls da immer noch Fehler auftreten, probier mal das Script hier im Anhang.
(Dateiendung noch auf php ändern)

Re: FEUListing

Posted: Sun Apr 27, 2008 6:34 pm
by Helmi
Herzlichen Dank für Deine Mühe! Mit dem heruntergeladenen Script funktioniert es! Ich mußte nur im Template den Link auf die Detailseite noch rausnehmen, sonst hat es nämlich über den Link doch noch die realen Daten der User angezeigt.