Module nur bestimmten FE-Gruppen anzeigen inkl. on-/offline

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Module nur bestimmten FE-Gruppen anzeigen inkl. on-/offline

Beitrag von McHubi »

Hallo zusammen,

bei einem aktuellen Projekt besteht der Bedarf, verschiedenen Frontend-Gruppen unterschiedliche Informationen darzustellen. Die Freigabe der Navigationspunkte für die jeweiligen Gruppen läuft ja über den Kategorieschutz von "Content/Kategorien" und die Freigabe über "Administration/Frontend/Frontend-Gruppen/Frontend-Berechtigungen".

Wenn bei einem Artikel jetzt zum Beispiel nur der Einleitungstext oder die Überschrift anders lauten soll (z. B. "Liebe Preißn!" oder "Liebe Bayern!"), dann ließe sich das natürlich über obige Lösung realisieren. Aber jetzt für jede Gruppe einen eigenen Navigationspunkt, Artikel usw. anzulegen wäre mit Kanonen auf Spatzen geschossen.

Insofern habe ich folgende Gruppenweiche eingerichtet, die an sich mit jedem Modul funktioniert. Gleichzeitig besteht die Möglichkeit, das Modul on- oder offline zu setzen. Dazu muss lediglich der Input und Output ergänzt werden:
INPUT

Code: Alles auswählen

?>
<table cellspacing="0" cellpadding="10" border="0">
  <tr>
    <td valign="top"><?php echo mi18n("Sichtbar für"); ?></td>
    <td><input size=5 type="text" name="CMS_VAR[20]" value="CMS_VALUE[20]"><br/><small>
	<?php echo mi18n("(1;2;... oder leer für alle)").'<br/>';
	echo mi18n("1: Gruppe XYZ").'<br/>';
	echo mi18n("2: Gruppe ABC").'<br/>';
	echo mi18n("3: GRUPPE 123");
	?>
	</small></td>
  </tr>
  <tr>
    <td><?php echo mi18n("offline"); ?></td>
    <td>
	<?php
    if ("CMS_VALUE[30]"!="true") echo '<input type="checkbox" name="CMS_VAR[30]" value="true"/>'; 
	  else echo '<input type="checkbox" name="CMS_VAR[30]" value="true" checked/>'; 
   ?>
	</td>
  </tr>
</table>
<?php
OUTPUT

Code: Alles auswählen

$id_feu=$auth->auth["uid"];
$show_content="true";
$show_content_to_fe_groups="CMS_VALUE[20]";
$offline="CMS_VALUE[30]";

if($contenido)
  {
  echo '<hr><p style="color: #ff0000; font-weight:900;">'.mi18n("Sichtbar für").' '.$show_content_to_fe_groups;
  if($show_content_to_fe_groups=="") echo mi18n("alle");
  if($offline=="true") echo ' - '.mi18n("Inhalt ist offline!");
  echo '</p>';
  }
  
if($id_feu!="nobody" AND $show_content_to_fe_groups!="" AND $offline!="true")
  {
  $show_content="false";
  $array_allowed_groups=array();
  $query = "SELECT idfrontendgroup FROM con_frontendgroupmembers WHERE idfrontenduser=$id_feu";
  $result = cRegistry::getDb();
  $result->query($query);
  while($result->nextRecord())
    {
    $arr=$result->toArray();
    $array_allowed_groups[]=$arr[idfrontendgroup];
    }
  $show_content_to_fe_groups_arr=explode(";",$show_content_to_fe_groups);
  foreach($array_allowed_groups AS $element) if(in_array($element,$show_content_to_fe_groups_arr)) $show_content="true";
  }

if(!$contenido AND $show_content=="true" AND $offline!="true" OR $contenido)
  {
  
  BISHERIGER MODULINHALT
  
  }
Was mich dabei jedoch noch etwas stört, ist der Punkt, dass erst einmal die Gruppenzugehörigkeiten des FE-Nutzers per sql-Abfrage ermittelt werden müssen (falls eine oder mehrere Gruppen vermerkt sind und das Modul online ist). Gibt es hier eine "direktere" Möglichkeit, also ein Pendant zu $id_feu=$auth->auth["uid"];, die mir z. B. ein Array mit den Werten der Spalte "idfrontendgroup" der Tabelle "con_frontendgroupmembers" liefert? Dann hätte man direkt alle notwendigen Infos für $array_allowed_groups parat.

VG,

Markus
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Module nur bestimmten FE-Gruppen anzeigen inkl. on-/offl

Beitrag von Oldperl »

Servus Markus,

schau Dir mal die Klasse cApiFrontendUser an :arrow: http://api.contenido.org/con493/class-c ... dUser.html
Die Methode getGroupsForUser() ist wohl das was du suchst.

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Antworten