Seite 1 von 1

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

Verfasst: Do 5. Jun 2014, 10:10
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

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

Verfasst: Do 5. Jun 2014, 13:11
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