2010-12-14 9 views
0

Ich entwickle eine Website; die Benutzer können Autos und Handys mit einem einzigen Registrierungskonto hinzufügen. Allerdings habe ich rechts und links Boxen für die Top-Hits (Autos, Handys), und in der Mitte habe ich die neu hinzugekommenen Autos und Handys. Ich spalte die Top-Hits in Elemente auf, und die Elemente sind topCars, topMobiles.Ich dachte daran, zwei Funktionen zu schreiben, um meine Sachen zu machen. Beide Funktionen sollten generisch sein, da wir in Zukunft weitere Dienste wie Software oder Filme hinzufügen können. Aber die erste Funktion wird die letzten Autos, oder Handys ... usw. bekommen, und das wird in der Mitte meiner Homepage veröffentlicht. Die zweite Funktion sollte die besten Treffer für (Autos, Handys, Filme usw.) bekommen. Ich schrieb den folgenden Code:So rufen Sie eine Funktion in app_controller in meinen Elementen

class AppController extends Controller 
{ 
    var $uses = array('Car','Mobile'); 
    function Controler() 
    { 
    App::import('Core', 'Sanitize'); 
    } 

    function beforeRender(){ 
    $this->getLatestData(); 
    } 

    function beforeFilter() { 
    $this->getTopData(); 
    } 

    function getLatestData(){ 
    $latestCars = $this->Car->find('all', array('order' => array('id' => 'desc'), 
                'limit' => 7)); 
    $latestMobiles = $this->Mobile->find('all', array('order' => array('id' => 'desc'), 
                'limit' => 7)); 
    $this->set('cars',$latestCars); 
    $this->set('mobiles',$latestMobiles); 
    } 


    function getTopData($item){ // to get the top hits 

    $top = $this->$item->find('all', array('order' => array('hits' => 'asc'), 
               'limit' => 3)); 
    $this->set($item,$top); 
    } 
} 

Mein Code arbeitet für die neuesten hinzugefügten Elemente fein in Ordnung, aber wenn ich versuche, die Spitze zu kommen! Er hat den Fehler zurückgibt. Bitte helfen Sie mir zu wissen, wie es funktioniert Danke

+1

Was ist der Fehler ?! – deceze

Antwort

0

Ich denke, Sie sollten diese Methoden nicht in der App_controller setzen. Sie sollten einen anderen Controller erstellen und getLatestData und getTopData dort ablegen. Verwenden Sie dann vom Element aus $ this-> requestAction, um die Controller-Aktion aus der Sicht aufzurufen. Natürlich sollten Sie auch eine Art Caching verwenden, um die Dinge zu beschleunigen.

Einige Leute werden sagen, Sie sollten nicht request verwenden, aber hier ist ein Artikel von einem der Kuchen Entwickler: http://mark-story.com/posts/view/how-using-requestaction-increased-performance-on-my-site

1
$this->requestAction('App/getTopData/'.$param); 
+0

Ich habe Ihren Post so bearbeitet, dass er nach Code aussieht. Kannst du eine Erklärung hinzufügen, warum es so funktioniert? Einzeilige, Nur-Code-Posts werden hier generell nicht empfohlen. – Maerlyn