typoscript: Text ersetzen (replace)

11. Mai 2011

Das Problem: in einem laufenden Projekt wird die Extension calendar base verwendet, um einen Kalender mit Events darzustellen. Bei der Monatsdarstellung gab es allerdings Probleme, der Bindestrich wurde als Zeilenumbruch gewertet und musste daher durch seine Sonderzeichen Entsprechung dargestellt werden. Damit ich nicht im sourcecode rumpfuschen musste, habe ich dies über typoscript gelöst und für title eine simple Ersetzung vorgenommen:

  1. plugin.tx_cal_controller.view.month.event.title{
  2. stdWrap.parseFunc.short {
  3. - = −
  4. }
  5. }

Der Bindestrich wird hier durch − ersetzt.

Magento Newsletter einrichten

04. Mai 2011

Magento bietet von Haus aus eine simple Newsletter Funktion. Da ich noch keine kostenfreie Extension dafür gefunden habe, habe ich mich mal bemüht, mit den vorhandenen Mitteln einen einigermaßen präsentablen, wiederverwendbaren Newsletter aufzusetzen, den auch Outlook anzeigt. Der Newsletter hat einen Header und Footer, im Inhalt werden die neuesten Produkte angezeigt. Das Layout ist mit Tabellen aufgebaut, da wird ja alle wissen, dass CSS Styles in einem Newsletter von den meisten Mailprogrammen nicht akzeptiert werden.

Schritt 1: anlegen der footer und header Templates

Ich habe meine templates footer.phtml und header.phtml genannt. Header hat eine Zeile beliebigen Inhalts und umschließt den gesamten Content mit einer Tabelle, Footer beendet diese Tabelle und hat nochmal eine abschließende Zeile, in die man beispielsweise disclaimer oder den unsubscribe Link hineinschreiben kann. Die beiden Dateien bekommen ein neues Verzeichnis im template Ordner des aktuellen Designs, und dieses Verzeichnis heißt “email”.
Die header Datei wird gespeichert unter /app/design/frontend/default/THEMENAME/template/email/header.phtml und sieht so aus:

  1. <table width="500" cellpadding="10">
  2. <tr height="70">
  3. <td bgcolor="#FF0000">
  4. ...header inhalt...
  5. </td>
  6. </tr>
  7. <tr>
  8. <td>

footer befindet sich unter /app/design/frontend/default/THEMENAME/template/email/footer.phtml und sieht so aus:

  1. </td>
  2. </tr>
  3. <tr height="70">
  4. <td bgcolor="#FF00FF">...footer inhalt...</td>
  5. </tr>
  6. </table>

Schritt 2: eine neue Newsletter Vorlage erstellen

Felder wie Absender, Betreff, etc. sind selbsterklärend und werden nach Wunsch ausgefüllt. In Vorlageninhalt kann man nun seine Inhalte einfügen und über die Magento Syntax den Footer, den Header und die neuen Produkte einfügen:

  1. {{block type="core/template" template="email/header.phtml"}}
  2. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim.
  3. {{block type="catalog/product_new" name="home.catalog.product.new" alias="product_homepage" template="catalog/product/new_nl.phtml"}}
  4. {{block type="core/template" template="email/footer.phtml"}}

In der ersten und letzten Zeile werden header und footer eingefügt und können so in neuen Vorlagen wiederverwendet werden. Der mittlere Aufruf ist für das Anzeigen neuer Produkte.

Schritt 3: Anzeige der neuen Produkte

Standardmäßig werden die neuen Produkte als Listen angezeigt, für einen Newsletter ist es besser, das ganze in einer Tabelle darzustellen, deshalb habe ich eine neue Datei in catalog/product/ angelegt, new_nl.phtml. Ich habe mir den Inhalt von new.phtml übernommen und meinen Vorstellungen entsprechend modifiziert:

  1. <?php if (($_products = $this->getProductCollection()) && $_products->getSize()): ?>
  2. <h2><?php echo $this->__('New Products') ?></h2>
  3. <?php $_columnCount = $this->getColumnCount(); ?>
  4. <table>
  5. <?php $i=0; foreach ($_products->getItems() as $_product): ?>
  6. <?php if ($i++%$_columnCount==0): ?>
  7. <tr>
  8. <?php endif ?>
  9. <td>
  10. <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(135) ?>" width="135" height="135" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" /></a>
  11. <h3><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a></h3>
  12. <?php echo $this->getPriceHtml($_product, true, '-new') ?><br/>
  13. </td>
  14. <?php if ($i%$_columnCount==0 || $i==count($_products)): ?>
  15. </tr>
  16. <?php endif ?>
  17. <?php endforeach; ?>
  18. </table>
  19. <?php endif; ?>

Damit werden die Daten in Tabellenzellen gepackt und so von den gängigen Mailprogrammen korrekt dargestellt.

aheadWorks blog auf der Startseite

02. Mai 2011

Ich fange gerade erst damit an, mich mit Magento zu beschäftigen. Für ein Projekt brauche ich auf der Startseite die Anzeige der neuesten Blogeinträge (beim Blog handelt es sich um die Blog Extension von aheadWorks) und dies geht offenbar folgendermaßen:

  1. <block type="blog/blog" name="blog" template="aw_blog/blog.phtml"></block>

In CMS – Seiten verwalten – Home Page – Gestaltung – XML für Layoutänderung.