limitierte Anzeige von Benutzern

Gesperrt
kiyoku
Beiträge: 108
Registriert: Di 2. Sep 2003, 09:35
Kontaktdaten:

limitierte Anzeige von Benutzern

Beitrag von kiyoku »

Hallo,

ich hätte da eine kleine Anmerkung bzw. eine Frage.

Da man ja das Problem mit dem Frontendzugriff nur über das Anlegen von Benutzern lösen kann, kann es durchaus bei großen Projekten bis zu 3000 Mitglieder geben, die dort angelegt werden müssen. Gibt es die Möglichkeit diese Benutzer im Menüpunkt limitiert anzeigen zu lassen. Beispielsweise in 100ter Schritten, so wie es bei dem Newsletter auch ist.

Ist dies schon der Fall, oder muss die Sache noch entwickelt werden, oder kann ich es mir nachträglich noch einbauen. Contenido hat nämlcih so seine Schwierigkeiten bei ca. 2000 Benutzer alle links anzuzeigen.

kiyoku
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Für die V4.4.4 könntest Du so etwas entwickeln, in der V4.5 wurde der Bereich stark überarbeitet - er enthält eine Suchfunktion aber (noch) keine Blätterfunktion.

Im Rahmen der Newsletter-Überarbeitung ist das Blättern auch im Newsletter-Bereich (für V4.5) flöten gegangen - ich wollte es mir aber nochmal ansehen, aber das dauert sicher eine ganze Weile, bis da was (von mir) kommt.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
kiyoku
Beiträge: 108
Registriert: Di 2. Sep 2003, 09:35
Kontaktdaten:

Beitrag von kiyoku »

o.k., ich habe mich mal an die Arbeit gemacht und eine limitierte Anzeige der Benutzer möglich gemacht.

Folgende Schritte sind zu durchlaufen:
1. die Datei "contenido\templates\standard\template.rights_menu.html" ist folgendermaßen anzupassen.

Einfach den folgenen Code unter var sid = "{SID}"; einfügen

Code: Alles auswählen

function userChangeLimit()
		{
			
			var element = document.getElementsByTagName("SELECT");
			
			url  = "";
            url += "main.php?area=user";
            url += "&frame=2";
			url += "&limit="+element[0].value;
			url += "&usersStart={USERSSTART}";
            url += "&contenido=" + sid;
			parent.frames["left_bottom"].location.href = url;
		}

		function userStartSearch()
		{
			
			var element = document.getElementsByTagName("INPUT");
			
			url  = "";
            url += "main.php?area=user";
            url += "&frame=2";
			url += "&limit={LIMITTO}";
			url += "&search="+element[0].value;
			url += "&usersStart={USERSSTART}";
            url += "&contenido=" + sid;
			parent.frames["left_bottom"].location.href = url;
		}
Weiter unten in der Tabelle müssen folgende Zeilen noch eingefügt werden

Code: Alles auswählen

<tr>
		<td colspan="2">
			<table border="0" cellspacing="0" cellpadding="0" width="100%">
				<tr>
					<td align="left"><img src="images/spacer.gif" width="20" height="10">{LEFT}</td>
					<td align="center" class="text_medium">{PAGESPEC}</td>
					<td align="right">{RIGHT}<img src="images/spacer.gif" width="20" height="10"></td>
				</tr>
			</table>
		</td>
	</tr>
  <tr>
		<td colspan="2">&nbsp;
		</td>
	</tr>
	<tr>
		<td style="padding-left: 4px;" align="left" colspan="2">
    		<table border="0" cellspacing="0" cellpadding="0">
    			<tr>
    				<td class="text_medium">i18n("Limit"):</td>
    				<td colspan="2" class="text_medium">{LIMIT}</td>
    			</tr>
    			<tr>
    				<td class="text_medium">i18n("Search"):</td>
    				<td class="text_medium">{SEARCH}</td>
					<td class="text_medium" valign="center"><img src="images/spacer.gif" width="2">{SEARCHSUBMIT}</td>
    			</tr>
    		</table>
		</td>
	</tr>
	<tr>
		<td colspan="2">&nbsp;
		</td>
	</tr>
2. die Datei "contenido\includes\include.rights_menu.php" ist folgendermaßen anzupassen.

Einfach den folgenden Code

Code: Alles auswählen

$sql = "SELECT
            username, realname, user_id, perms
        FROM
            ".$cfg["tab"]["phplib_auth_user_md5"]."
        ORDER BY
            username ASC";

if ($restriction == 1)
{
	 $sql = "SELECT
            A.username AS username, A.realname AS realname, A.user_id as user_id, A.perms as perms
        FROM
            ".$cfg["tab"]["phplib_auth_user_md5"]." AS A,
            ".$cfg["tab"]["rights"]." AS B,
			".$cfg["tab"]["actions"]." AS C
        WHERE
        	C.name = 'front_allow' AND
			B.user_id = A.user_id AND
        	C.idaction = B.idaction AND
			A.perms LIKE ''
		GROUP BY
			user_id
        ORDER BY
            username ASC";
            
}

if ($restriction == 3)
{
	 $sql = "SELECT
            A.username AS username, A.realname AS realname, A.user_id as user_id, A.perms as perms
        FROM
            ".$cfg["tab"]["phplib_auth_user_md5"]." AS A,
            ".$cfg["tab"]["rights"]." AS B,
			".$cfg["tab"]["actions"]." AS C
        WHERE
        	C.name NOT LIKE 'front_allow' AND
			B.user_id = A.user_id AND
        	C.idaction = B.idaction AND
			A.perms NOT LIKE ''
		GROUP BY
			user_id
        ORDER BY
            username ASC";
}
$db->query($sql);


// Empty Row
$bgcolor = '#FFFFFF';
$tpl->set('s', 'PADDING_LEFT', '10');
$thisperm = split(",", $auth->auth["perm"]);

$accessibleClients = $classclient->getAccessibleClients();

while ($db->next_record())
{

    $userperm = split(",", $db->f("perms"));

    $allow = false;
durch folgenden Code ersetzen

Code: Alles auswählen

$tpl->set('s', 'USERSSTART',$usersStart);


if (is_string($search) && strlen($search) > 0)
{
  $search = urlencode($search); /* HerrB: urlencode ergänzt*/
	$limitSQL = "AND name LIKE '%$search%' OR email LIKE '%$search%' "; 
} else {
	$limitSQL = "";
}


$sql = "SELECT
            COUNT(*)
        FROM
            ".$cfg["tab"]["phplib_auth_user_md5"]."
        ORDER BY
            username ASC
        $limitSQL";
          
$db->query($sql);

if ($db->next_record())
{
	$numUsers = $db->f("COUNT(*)");
} else {
	$numUsers = 0;
}

if (!is_numeric($limit) || $limit == 0)
{
  $limit = 20;
}

$tpl->set('s', 'LIMITTO', $limit);

$howManyUsers = $limit;

if ($usersStart > $numUsers) 
{
	$usersStart = $numUsers-$howManyUsers;
}

if ($usersStart < 0)
{
	$usersStart = 0;
}

$limitOptions = array(
						10 => "10",
						20 => "20",
						50 => "50",
						100 => "100");

			
$tpl2 = new Template;
$tpl2->set('s', 'NAME', 'limit');
$tpl2->set('s', 'CLASS', 'text_medium');
$tpl2->set('s', 'ID', 'limit');
$tpl2->set('s', 'OPTIONS', "onChange='userChangeLimit()'");

foreach ($limitOptions as $key => $value)
{
	if ($key == $limit)
	{
		$selected = "SELECTED";
	} else {
		$selected = "";
	}
	
	$tpl2->set('d', 'VALUE', $key);
	$tpl2->set('d', 'CAPTION', $value);
	$tpl2->set('d', 'SELECTED', $selected);
	$tpl2->next();
}

$select = $tpl2->generate($cfg["path"]["templates"]. $cfg["templates"]["generic_select"],true);

if ($usersStart > 0)
{
	$left = '<a href="'.$sess->url("main.php?area=$area&frame=2&limit=$limit&usersStart=".($usersStart-$howManyUsers)).'"><img border="0" src="images/pfeil_links.gif"></a>';
} else {
	$left = '<img src="images/spacer.gif" width="9" height=15">';
}

if (($usersStart + $howManyUsers) < $numUsers)
{
	$right = '<a href="'.$sess->url("main.php?area=$area&frame=2&limit=$limit&usersStart=".($usersStart+$howManyUsers)).'"><img border="0" src="images/pfeil_rechts.gif"></a>';
} else {
	$right = '<img src="images/spacer.gif" width="9" height=15">';
}

$tpl->set('s', 'LEFT', $left);
$tpl->set('s', 'RIGHT', $right);
$tpl->set('s', 'LIMIT', $select);
$pageCount = ceil($numUsers / $limit);
$currentPage = ceil($usersStart / $limit)+1; 
if ($numUsers > 0)
{
	$tpl->set('s', 'PAGESPEC', i18n("Page") .' '. $currentPage .' / '.$pageCount);
} else {
	$tpl->set('s', 'PAGESPEC', i18n("No results"));
}
$tpl->set('s', 'SEARCH', '<input type="text" name="search" class="text_medium" maxlen="256" size="16">');
$tpl->set('s', 'SEARCHSUBMIT', '<input type="image" onclick="userStartSearch()" src="images/submit.gif" alt="'.i18n("Start search").'" title="'.i18n("Start search").'">');


$sql = "SELECT
            username, realname, user_id, perms
        FROM
            ".$cfg["tab"]["phplib_auth_user_md5"]."
        ORDER BY
            username ASC
        $limitSQL";

$db->query($sql);


// Empty Row
$bgcolor = '#FFFFFF';
$tpl->set('s', 'PADDING_LEFT', '10');
$thisperm = split(",", $auth->auth["perm"]);

if ($numUsers > 0)
{
	$db->seek($usersStart);
}

$userCount = 0;

$accessibleClients = $classclient->getAccessibleClients();

while ($db->next_record())
{

    $userCount++;
	  if ($userCount > $howManyUsers) 
	  {
		  break;
	  }
  
    $userperm = split(",", $db->f("perms"));

    $allow = false; 
Die beiden Dateien einfach mit einem FTP-Programm wieder auf den Server spielen und schon sollte es funktionieren.

Eine Sache sei noch angemerkt. Der folgende Code wurde von mir nicht beachtet und einfach gelöscht.

Code: Alles auswählen

if ($restriction == 1)
{
	 $sql = "SELECT
            A.username AS username, A.realname AS realname, A.user_id as user_id, A.perms as perms
        FROM
            ".$cfg["tab"]["phplib_auth_user_md5"]." AS A,
            ".$cfg["tab"]["rights"]." AS B,
			".$cfg["tab"]["actions"]." AS C
        WHERE
        	C.name = 'front_allow' AND
			B.user_id = A.user_id AND
        	C.idaction = B.idaction AND
			A.perms LIKE ''
		GROUP BY
			user_id
        ORDER BY
            username ASC";
            
}

if ($restriction == 3)
{
	 $sql = "SELECT
            A.username AS username, A.realname AS realname, A.user_id as user_id, A.perms as perms
        FROM
            ".$cfg["tab"]["phplib_auth_user_md5"]." AS A,
            ".$cfg["tab"]["rights"]." AS B,
			".$cfg["tab"]["actions"]." AS C
        WHERE
        	C.name NOT LIKE 'front_allow' AND
			B.user_id = A.user_id AND
        	C.idaction = B.idaction AND
			A.perms NOT LIKE ''
		GROUP BY
			user_id
        ORDER BY
            username ASC";
}
Ich weiß nicht vorauf sich das $restriction bezieht und für was es wichtig ist. Es funktioniert aber auch so.

So ich hoffe, ich habe nichts vergessen.
Ich stehe aber bei Problemchen gerne zur Verfügung.

Viel Spaß damit.
kiyoku
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Das ist für Version 4.4.4, richtig?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
kiyoku
Beiträge: 108
Registriert: Di 2. Sep 2003, 09:35
Kontaktdaten:

Beitrag von kiyoku »

ja, sorry, hatte ich vergessen zu sagen.
Ist für 4.4.4.
Gesperrt