Backend Snippets

Snippets und Tweaks zur Modifikation des Backends

  1. Navigation ausblenden
  2. AddOn ausblenden
  3. Seite eines AddOns durch eigene austauschen/ersetzen
  4. Subpage eines AddOns durch eigene entsprechend Recht austauschen/ersetzenn
  5. Sortierung des Medienpools ändern
  6. Nur zugelassenen IPs Zugriff aufs Backend gewähren

Es ist möglich, die Hauptnavigation und die AddOns auszublenden. Nutzt die Bootstrap-Funktionen.

Folgenden Code in die boot.php des Project-AddOns platzieren:

if (rex::isBackend() and rex_backend_login::hasSession()) {
  rex_extension::register('OUTPUT_FILTER', static function(rex_extension_point $ep) {
      $search` = '<h4 class="rex-nav-main-title">' . rex_i18n::msg('navigation_addons') . '</h4>' . "\n        " . '<ul class="rex-nav-main-list nav nav-pills nav-stacked">';
      $replace = '<h4 class="rex-nav-main-title" data-toggle="collapse" data-target="#'.rex_i18n::msg('navigation_addons').'">'.rex_i18n::msg('navigation_addons').'</h4><ul class="rex-nav-main-list nav nav-pills nav-stacked collapse" id="'.rex_i18n::msg('navigation_addons').'">';    
      $subject = str_replace($search, $replace, $ep->getSubject());
      $ep->setSubject($subject);
  });
}

AddOn ausblenden

Es ist möglich, einzelne AddOns auch für Administratoren auszublenden. In diesem Beispiel werden der Installer und die Systemverwaltung ausgeblendet.

Möglichkeit 1: Direkt via rex_be_controller

Folgenden Code in die boot.php des Project-AddOns platzieren:

if (rex::isBackend() and rex_backend_login::hasSession()) {
  $page = rex_be_controller::getPageObject('system');
  $page->setHidden(true);
  $page->setPath('...');

  $page = rex_be_controller::getPageObject('packages');
  $page->setHidden(true);
  $page->setPath('...');
}

Möglichkeit 2: Via Extension Point PAGES_PREPARED

Möchte man auch Systemseiten individualisiert ausgeben, kann man über den Extension Point.

In diesem Ausgangsszenario von Simon waren für Benutzer Admin-Rechte notwendig, aber diese Benutzer sollen dennoch nicht alles sehen und machen können. Diese Benutzer sollen bspw. Templates bearbeiten können, jedoch keine Module. Das war notwendig, da auf Grundlage der Templates von der Drittagentur eine Erweiterung geschrieben werden sollte, die sich am Grundtemplate der Seite orientiert.

Reines Ausblenden per CSS erfüllt diesen Zweck nicht.

Folgenden Snippet in die boot.php des Project-AddOns eingebunden.

if ( ( rex::isBackend() ) && ( rex::getUser()->getLogin() == 'LOGINNAME' ) ) {
   rex_extension::register('PAGES_PREPARED', function (rex_extension_point $ep) {
      $page = rex_be_controller::getPageObject( 'modules' );
      $page->setHidden( true );
      $page->setPath( '...' );
}

Seite eines AddOns durch eigene austauschen/ersetzen

Will man eine alternative Seite in einem AddOn darstellen und die vorhandene ersetzen, kann dies mit dem nachfolgenden Codes erfogen. In diesem Beispiel wird die index.php des Struktur-AddOns ausgetauscht.

Startseite eines Addons zur Laufzeit verändern

$addon = rex_addon::get('addonname');
$page = $addon->getProperty('page');
$page['href'] = ['page' => 'cronjob/log'];
$addon->setProperty('page', $page);

Ersetzen durch Seite eines anderen AddOns

Folgenden Code in die boot.php des Project-AddOns platzieren:

rex_extension::register('PAGES_PREPARED',function($ep) {
  if (rex_be_controller::getCurrentPage() == 'structure') {
    $Page = rex_be_controller::getCurrentPageObject();
    $Page->setPath($this->getPath('pages/index.php'));
  }
});

Verwendeter Extension point: PAGES_PREPARED

Subpage eines AddOns durch eigene entsprechend Recht austauschen/ersetzen

if (is_object(rex::getUser()) AND rex::getUser()->hasPerm('addonname[recht]') AND !rex::getUser()->isAdmin()):
$addon = rex_addon::get('addonname');
$page = $addon->getProperty('page');
        $page['subpages']['config'] = [
        'title' => 'Mein neuer Menüpunkt', 
        'icon' => 'rex-icon fa-wrench'
        ];  //neuen Menüpunkt nachträglich einfügen
        
        unset($page['subpages']['default']); //alten Menüpunkt nachträglich entfernen
$addon->setProperty('page', $page);

endif;

Sortierung des Medienpools ändern

Die Standard-Sortierung im Medienpool ist immer chronologisch. Die folgende Lösung sorgt für eine alphabetische Sortierung.

Verwendeter Extension point: MEDIA_LIST_QUERY

Folgenden Code in die boot.php des Project-AddOns platzieren:

// Sortierung Medienpool aufsteigend
if (rex::isBackend() && rex::getUser()) {
  rex_extension::register('MEDIA_LIST_QUERY', function (rex_extension_point $ep) {
    $subject = $ep->getSubject();
    $subject = str_replace("f.updatedate", "f.filename, f.updatedate", $subject);
    $subject = str_replace("desc", "asc", $subject);
    return $subject;
  });
}

Nur zugelassenen IPs Zugriff aufs Backend gewähren

Den nachfolgenden Code in die boot.php des project-Addons kopieren und IPs anpassen:

	if (rex::isBackend())
	{
	  $ips= array("00.00.00.00", "00.00.00.00");	
	   if (!in_array(rex_server('REMOTE_ADDR'),$ips)) {
	      rex_response::sendRedirect('https://google.com');
	      }
	}