Entwickler, der außergewöhnliche CRM- und Laravel-Lösungen liefert

Als erfahrener Entwickler spezialisiere ich mich auf Laravel- und Vue.js-Entwicklung, die Implementierung von Vtiger CRM sowie auf vielfältige WordPress-Projekte. Meine Arbeit zeichnet sich durch kreative, dynamische und benutzerzentrierte Weblösungen aus, die individuell an die Bedürfnisse meiner Kunden angepasst werden.

In diesem Artikel zeige ich, wie Sie Felder in Vtiger serverseitig ausblenden – ohne JavaScript und ohne Ladeverzögerungen. Die Lösung ist ideal für Szenarien, bei denen Felder basierend auf anderen Feldwerten (z. B. Deal-Status) angezeigt/versteckt werden sollen.

Felder in Vtiger dynamisch ausblenden: Eine PHP-basierte Lösung

In diesem Artikel zeige ich, wie Sie Felder in Vtiger serverseitig ausblenden – ohne JavaScript und ohne Ladeverzögerungen. Die Lösung ist ideal für Szenarien, bei denen Felder basierend auf anderen Feldwerten (z. B. Deal-Status) angezeigt/versteckt werden sollen.

Vorteile dieser Methode

  • Keine Client-seitige Verarbeitung: Felder werden bevor die Seite lädt ausgefiltert.
  • Performance-Optimiert: Reduziert Serverlast im Vergleich zu JavaScript-Lösungen.
  • Einfach zu pflegen: Zentrale Konfiguration über ein PHP-Array.

Schritt-für-Schritt-Anleitung

1. Konfigurationsdatei erstellen

Erstellen Sie vtiger_detailview_list.php im Vtiger-Stammverzeichnis:

<?php  
$detailview_list = [  
    'Potentials' => [  
        'checkField'    => 'cf_1269',          // Feld, das den Status prüft  
        'checkValue'    => 'Submission Received', // Wert, bei dem Felder sichtbar sind  
        'allowedFields' => [                   // Erlaubte Felder im Detailview  
            'potentialname', 'potential_no', 'cf_1269',  
            'cf_3709', 'cf_3713', 'cf_3867',  
            'forecast_amount', 'cf_1926'  
        ]  
    ]  
];  

2. Konfiguration in Vtiger einbinden

Fügen Sie diese Zeile in config.inc.php ein:

require_once 'vtiger_detailview_list.php';  

3. DetailRecordStructure.php anpassen

Öffnen Sie modules/Vtiger/models/DetailRecordStructure.php und fügen Sie diese Methode hinzu:

protected function isFieldAllowed(string $fieldName, ?Vtiger_Record_Model $record): bool {  
    global $detailview_list;  

    if (!$record || !isset($detailview_list[$record->getModuleName()]['checkField'])) {  
        return true;  
    }  

    $config = $detailview_list[$record->getModuleName()];  
    $fieldValue = $record->get($config['checkField']);  

    // Nur erlaubte Felder anzeigen, wenn der Status übereinstimmt  
    return ($fieldValue === $config['checkValue'])  
        ? in_array($fieldName, $config['allowedFields'], true)  
        : true;  
}  

4. Aufruf in getStructure() anpassen

Ändern Sie die Zeile (~Zeile 39) in getStructure() von:

if ($fieldModel->isViewableInDetailView())  


zu:

if ($fieldModel->isViewableInDetailView() && $this->isFieldAllowed($fieldName, $recordModel))  

Wie es funktioniert

  1. Konfiguration: Definiert für jedes Modul:
  • Welches Feld (checkField) überprüft wird.
  • Welcher Wert (checkValue) die Filterung auslöst.
  • Welche Felder (allowedFields) in diesem Fall sichtbar sind.
  1. Serverseitige Logik: Bei der Seitenladung wird geprüft, ob der aktuelle Datensatz die Bedingungen erfüllt.
  2. Filterung: Nicht erlaubte Felder werden bevor die Seite gerendert wird entfernt.

Beispiel: Deals (Potentials)

  • Statusfeld: cf_1269 (Beispiel: "Submission Received").
  • Sichtbare Felder: Nur potentialname, forecast_amount usw.
  • Ergebnis: Wenn der Deal-Status "Submission Received" ist, werden nur die definierten Felder im Detailview angezeigt.

Wichtige Hinweise

  • Caching: Leeren Sie den Vtiger-Cache nach Änderungen (config.inc.php?module=Utilities&action=rebuild).
  • Sicherheit: Testen Sie Änderungen in einer Staging-Umgebung.
  • Bearbeitungsansicht: Diese Lösung gilt nur für das Detailview. Für Edit-Ansichten sind zusätzliche Anpassungen nötig.
  • Listenansicht: Felder werden in Übersichten nicht ausgeblendet – hierfür benötigen Sie separate Logik.

Erweiterungsmöglichkeiten

  1. Mehrere Bedingungen:
   'checkValue' => ['Submission Received', 'In Review'],  
  1. Module übergreifend:
   'Leads' => [  
       'checkField' => 'status',  
       'checkValue' => 'Converted',  
       'allowedFields' => [...]  
   ]  
  1. Dynamische Konfiguration: Laden Sie Regeln aus der Datenbank für flexiblere Anpassungen.

JavaScript vs. PHP: Vergleich

KriteriumPHP-MethodeJavaScript-Lösung
LadezeitFelder werden nie übertragenFelder laden + nachträglich hide
SEOKeine versteckten InhalteInhalte im DOM vorhanden
KomplexitätMittel (PHP-Kenntnisse nötig)Einfach (UI-Experten freuen sich)

Mit dieser Methode behalten Sie die Kontrolle über die Datendarstellung – effizient und serverfreundlich. Bei Fragen posten Sie gerne einen Kommentar! 🚀


„Weniger ist manchmal mehr – besonders wenn es um übersichtliche Datensätze in CRM-Systemen geht.“