2016-07-22 11 views
1

Ich habe den folgenden Anwendungsfall, dass ich einige Daten von ip-api.com abrufen und in einer Sitzung ablegen muss, damit einige spezifische Kundendaten später in dem Prozess in meiner Anwendung verwendet werden können.Concrete5 Controller-Logik

Problem ist, dass ich keine Ahnung habe, wo die Logik Concrete5 sich selbst setzen. Ich erstelle gerade eine Klasse in application/src/IpApi und die Klasse selbst ist nicht das Problem. Das Hauptproblem ist, wie ich sicherstellen kann, dass es auf jedem einzelnen Seitenaufruf ausgeführt wird. Eine zweite Option wäre, einen Block zu erstellen und ihn in den Header einzufügen, aber ich brauche die Daten zu analysieren, noch bevor die Startseite aktiv ist, also bevor die Vorlage-Engine gerendert wird.

Wo sollte ich es hinstellen und wie sollte ich es laden. Mein aktuelles Thema ist eine Erweiterung des Themas elemental, so dass es immer noch ziemlich out of the box ist.

Danke für den Rat

Antwort

0

Ich fand heraus, dass ich ein PageType ersten erstellen soll. Danach wird die spezifische Art Controller bei application/controllers/page_types/<mytype.php>

Von dort wird die on_start Methode erstellt werden kann, ist dein Freund oder was auch immer Funktion benötigen Sie natürlich

1

Sie ein Paket erstellen kann und das Paket-Controllers on_start-Funktion verwenden. Ich würde empfehlen, den Vorgang auch innerhalb eines on_before_render-Ereignisses auszuführen, um sicherzustellen, dass Sie dies nicht auf Ajax-Anfragen und anderen Dingen tun. Es würde ungefähr so ​​aussehen:

<?php 
namespace Concrete\Package\SomePackage; 

class Controller extends \Concrete\Core\Package\Package 
{ 

    public function on_start() 
    { 
     $app = \Core::make('app'); 
     $app->make('director')->addEventListener(
      'on_before_render', 
      function() use ($app) { 
       $session = $app->make('session'); 
       $flashBag = $session->getFlashBag(); 

       if (!$flashBag->has('my-custom-data')) { 
        $dataGetter = $app->make('YourCustomDataGetterClass'); 
        $flashBag->set('my-custom-data', $dataGetter->getData()); 
       } 
      } 
     ); 
    } 

}