2010-12-14 70 views
0

Je développe un site web; que les utilisateurs peuvent ajouter des voitures et des mobiles avec un compte d'enregistrement. Cependant, j'ai sur la droite et sur la gauche des cases pour les meilleurs hits (voitures, mobiles), et au milieu j'ai les voitures et les mobiles récemment ajoutés. Je divise les meilleurs hits en éléments, et les éléments sont topCars, topMobiles. Je pensais écrire deux fonctions pour faire mes trucs. Les deux fonctions devraient être génériques, car à l'avenir nous pourrions ajouter d'autres services comme des logiciels ou des films. Cependant, la première fonction obtiendra les voitures récentes, ou mobiles ... etc, et cela sera publié au milieu de ma page d'accueil. La deuxième fonction devrait obtenir les meilleurs résultats pour (voitures, mobiles, films .... etc). J'ai écrit le code suivant:Comment appeler une fonction dans app_controller dans mes éléments

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); 
    } 
} 

Mon code fonctionne bien pour les dernières ont ajouté des articles bien, mais lorsque je tente d'obtenir le haut HITS il renvoie l'erreur. S'il vous plaît aidez-moi à savoir comment faire fonctionner Merci

+1

Quelle est l'erreur ?! – deceze

Répondre

0

Je pense que vous ne devriez pas mettre ces méthodes dans le app_controller. Vous devriez créer un autre contrôleur et y placer getLatestData et getTopData. Ensuite, à partir de l'élément, utilisez $ this-> requestAction pour appeler l'action du contrôleur depuis la vue. Bien sûr, vous devriez également utiliser une sorte de cache pour accélérer les choses.

Certaines personnes disent que vous ne devriez pas utiliser requestAction mais voici un article de l'un des développeurs de gâteau: http://mark-story.com/posts/view/how-using-requestaction-increased-performance-on-my-site

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

J'ai modifié votre message pour qu'il ressemble au code. Pouvez-vous ajouter une explication pourquoi cela fonctionne de cette façon? Les messages à ligne unique et à code uniquement sont généralement déconseillés ici. – Maerlyn