2012-11-06 12 views
11

ich eine Variable mit dem Blockcode wie von JSON-Typ in magento, übergeben willWie Parameter mit Blockform Inhalt von CMS-Seiten in magento passieren

{{block type="multibanners/multibanners" category_id="9" name="multibanners" alias="multibanners" template="multibanners/multibanners.phtml"}} 

von cms Seiten Inhaltsbereich, aber ich don‘ Ich bekomme nichts.
Wenn ich Block mit Aktionsmethode verwende, bekomme ich leicht meinen Wert. Wer weiß, wie kann ich Variable mit meinem benutzerdefinierten Block übergeben?

Antwort

25

Ich bin nicht 100% sicher, was Sie fordern, aber wenn Sie versuchen, eine Variable multibanners.phtml aus dem Code zu übergeben oben dann könnte man ein anderes category_id="9" ähnliche Attribut erstellen und in multibanners.phtml Sie den Wert $this->getData("category_id"); mit bekommen könnte

z

{{block ... my_var="value here" ... template="multibanners/multibanners.phtml"}} 

In multibanners.phtml:

$this->getData('my_var'); 
+0

Ok, lassen Sie mich mehr Details erklären. Ich möchte Variable wie category_id aus dem Block übergeben, aber ich kann keine Werte in PHP oder Block mit $ this-> getData ('my_var') oder $ this-> getMyVar(). Ich habe versuchen Sie Ihren Code, aber nichts passieren. Ich hoffe du hast was ich machen will. –

+0

Haben Sie Cache-Aktivierung und welche Version von Magento verwenden Sie? –

+0

Ich deaktiviere alle Arten von Cache aufgrund der Entwicklung und verwende Magento ver. 1.7.0.0. –

0

Wenn der Block auf einer Seite cms Hinzufügen entfernen Stil von Blockcode.

{{block type="multibanners/multibanners" name="multibanners" alias="multibanners" template="multibanners/multibanners.phtml" category_id="8"}} 

Um die category_id in Ihrem phtml oder Sperrung der Nutzung $this->getCategoryId() zu erhalten.

2

Ich fand das sehr nützlich und ich dachte, ich würde erklären, was ich tat, falls es jemand anderem hilft.

Ich habe ein paar statische Blöcke, die ich verwenden, um einige statische Seiten mit grundlegenden unveränderlichen Informationen (über-uns-Typ-Seiten) zu bauen, die einige Fotos enthalten. Die Fotos sind sehr groß (für eine Webseite) und ich wollte Magentos Größe ändern. Die einzige Möglichkeit, dies zu erreichen, bestand darin, die Ideen hier zu verwenden. Ich habe jetzt einen Block, den ich auf irgendeine statische Seite/Block von cms einschließen kann, wenn ich ein Bild in der Größe mit mehreren Parametern haben möchte. Es ist wie eine Unterroutine (darf ich das sagen ?!; o). Wie auch immer, hier ist was ich getan habe.

Der Block:

{{block type="core/template" name="display_resized_img" gimg="IMG_0559.JPG" gsize="300" gpath="/wysiwyg/ShopFront/" gclass="about-us" galt="The shop" template="utilities/display_resized_img.phtml"}} 

und die phtml Codedatei: Ich

<?php 
/* 
* Displays and resizes an image as requested from the block. 
* The image is only resized if it hasn't been already. 
*/ 

$img = $this->getData('gimg'); 
$size = $this->getData('gsize'); 
$path = $this->getData('gpath'); 
$class = $this->getData('gclass'); 
$alt = $this->getData('galt'); 
$resizePath = Mage::getBaseDir ('media') . $path . "resized/" . $size . $img; 
if (!file_exists($resizePath)): 
    $imagePath = Mage::getBaseDir('media') . $path . $img; 
    $imageObj = new Varien_Image($imagePath); 
    $imageObj->constrainOnly(TRUE); 
    $imageObj->keepAspectRatio(TRUE); 
    $imageObj->keepFrame(FALSE); 
    $imageObj->resize($size, null); 
    $imageObj->save($resizePath); 
endif; 
$resizeUrl = Mage::getBaseUrl ('media') . $path . "resized/" . $size . $img; 
?> 
<img class="<?php echo $class; ?>" src="<?php echo $resizeUrl ?>" alt="<?php echo $alt; ?>"> 

Hinweis ich meine verkleinerten Bilder in einer Größe veränderten Ordner speichern und die neue Größe der Image-Dateinamen hinzufügen, so kann leicht sehen, was passiert und die Dateien verwalten.

Danke fürs Lesen!

+0

Ich frage mich nur, warum jemand das abgelehnt hat? Vielleicht habe ich den Zweck dieser Foren missverstanden, aber ich dachte, dass das Teilen unserer Erfahrungen ein Teil davon war? – PedroKTFC

+1

PedroKTFC, stimme ich Ihnen völlig zu. Ich schätze, Hasser werden es hassen. Persönlich fand ich deine Antwort hilfreich; lemme push die Abstimmung +1;) – Jongosi

+1

Danke Jongosi! :O) – PedroKTFC

3

Ich denke, das Problem hier stammt von der Blockart, die Sie anrufen. Wenn Sie einen Typ definieren, weisen Sie Magento an, dieses Modell zu laden und ihm die entsprechenden Daten zu übergeben, die dann nur die Funktionen offen legen, die für dieses spezifische Modell definiert sind.

Eine bessere Lösung könnte darin bestehen, auf den Kernblocktyp "core/template" zu verweisen, der die Methode -> getData() verfügbar macht und dann das Modell "multibanners/multibanners" lädt, um mit den Daten zu arbeiten und sie auszugeben.

Ich bin mir nicht sicher, was die richtige Syntax ist, um "Multibanner" zu laden, aber in den Multibannern.phtml wäre etwa so:

<?php 

$catId = $this->getData('category_id'); 
$multibanner = Mage::getModel('multibanners/multibanners')->load($catId); 

/** 
** Generate some output here. 
*/ 

?>