0

Ich brauche interagiert mit einer .tpl Datei in meiner Admincontroller-Klasse, aber wenn ich versuche, das zu tun, dieser Fehler erscheintWas ist der beste Prestashop-Weg, um tpl in AdminController einzubinden?

Fatal error: Call to undefined method RiddlePageController::getCacheId() in /home/USER/public_html/prestashop/modules/RiddleModule/controllers/admin/RiddlePage.php on line 48

Dies ist mein Admin-Controller-Code:

class RiddlePageController extends AdminController { 

public function __construct() 
{ 
    $this->html = ''; 
    $this->display = 'view'; 
    $this->meta_title = $this->l('metatitle'); 
    $this->module = "RiddleModule"; 

    parent::__construct(); 
} 

public function initContent() 
{ 
    $this->postProcess(); 
    $this->show_toolbar = true; 
    $this->display = 'view'; 
    $this->meta_title = $this->l('Modulo'); 
    parent::initContent(); 
} 

public function initToolBarTitle() 
{ 
    $this->toolbar_title = $this->l('Titulo'); 
} 

public function initToolBar() 
{ 
    return true; 
} 

public function renderView() { 
    $this->context->smarty->assign(
     array( 
      'img1' => "http://www.free-3dmodels.com/image/Flowers-3D-Model-3662994d.png", 
      'img2' => "http://www.all3dmodel.com/Images/39.jpg" 
      ) 
     ); 
    // in return have error "getCacheId" 
    return $this->display(__FILE__, 'content.tpl', $this->getCacheId()); 
    // return "<b>This works fine!!</b>"; 

} 

meine tpl-Datei habe nur {$img1} und {$img2} zum Testen.

Vielleicht mache ich alles falsch, und das ist nicht der beste Weg, um in meiner eigenen Admin-Seite zu machen.

Antwort

0

Als @TheDrot uns gesagt, die Antwort ist $this->context->smarty->fetch(location) in Verwendung, aber nicht in renderList, aber in der return-Anweisung von Render ist OK und Prestashop die tpl-Datei zu erhalten und laden Sie richtig die Smarty-Variablen. Ex:

public function renderView(){ 
    $this->context->smarty->assign(
     array( 
      'img1' => "http://www.free-3dmodels.com/image/Flowers-3D-Model-3662994d.png", 
      'img2' => "http://www.all3dmodel.com/Images/39.jpg" 
      ) 
     ); 

    return $this->context->smarty->fetch(_PS_MODULE_DIR_ . "RiddleModule/controllers/front/prueba.tpl"); 
} 

Der Speicherort der Datei ist nicht wichtig, die TPL-Datei in diesem Fall zu laden

0

AdminController Klasse hat keine Implementierung von display Methode, die Sie verwenden, um TPL zu rendern.

$this->module->display(_PS_MODULE_DIR_.$this->module->name.DIRECTORY_SEPARATOR.$this->module->name.'.php', 'content.tpl') 

Viel Glück:

Sie können so etwas wie dieses nach Satzmodul var verwenden.

4

Ihr Fehler liegt daran, dass die AdminController-Klasse nicht über die getCacheId-Methode verfügt.

Um auf Ihre Frage zu antworten, müssen Sie ein wenig reparieren.

First (erweitert ModuleAdminController nicht AdminController):

 
class AdminRiddlePageController extends ModuleAdminController 
{ 
}

Dann, wenn Sie Ihre benutzerdefinierten tpl anzeigen möchten, legen Sie eine view.tpl Datei in:
prestashop/modules/RiddleModule/views/templates/admin/riddlepage/helpers/view/
oder
prestashop/modules/RiddleModule/views/templates/admin/riddle_page/helpers/view/
(I don‘ t erinnere dich gut, wenn der Unterstrich notwendig ist)

Und deine renderView Methode soll wie folgt sein:

public function renderView() 
{ 
    /* Your code */ 

    /* Use this snippet to assign vars to smarty */ 
    $this->tpl_view_vars = array(
     'myvar' => 1, 
     'secondvar' => true 
    ) 
    return parent::renderView(); 
} 
+0

es nicht mein Freund funktioniert ... aber die gute Nachricht mit Ihrer Lösung zeigen nun die leere Seite nur, kein Fehler ... lass mich dir zeigen http://prnt.sc/dy8bp5 – manhattan

+1

@manhattan [Dies] (http://stackoverflow.com/questions/40544689/render-helper-form-from-prestashop-admin -controller /) sollte Ihnen helfen, ein benutzerdefiniertes tpl in einem Admin-Controller zu laden. – TheDrot

+0

@manhattan Ich habe eine Änderung vorgenommen, versuchen Sie 'AdminRiddlePageController' anstelle von' RiddlePageController', vergessen Sie nicht, die 'Tab'-Tabelle in DB zu aktualisieren – sarcom

Verwandte Themen