Persistent Objects

Magento and the Toy Safety Directive

Child safety is important and the Toy Safety Standards in the European Toy Safety Directive 2009/48/EC helps ensure that warnings are available at the point of purchase.  Although Magento commerce can handle these warnings, consistent naming of the attributes and a small modification to the front-end design can improve the user experience and communicate these warnings more effectively without distracting from the product offering.

The technique offered here can be used for different types of warnings and messages whilst still using the existing Magento Attribute mechanisms.

The technique is to prefix the product attributes with 'warning' so that they can be easily identified, then using the extensible design offered by Magento to modify the way the attributes are displayed, normal attributes first, followed by any warning attributes if they are appropriate.  As the European Directive is very clear with respect to the messages prescribed, it is possible to define them using Yes/No answers.  The following shows some of those attributes.

warning_tsd_01_under3 Not suitable for children under three years
warning_tsd_02_domestic_use Only for domestic use
warning_tsd_03_adult_supervision To be used under the direct supervision of an adult
etc.

The code used to render the attributes is extended from the default template as follows

app/design/frontend/default/mydesign/template/catalog/product/view/attributes.phtml

<?php
    $_helper = $this->helper('catalog/output');
    $_product = $this->getProduct();
    $_warning = false;
?>
<?php if($_additional = $this->getAdditionalData()): ?>
    <h2><?php echo $this->__('Additional Information') ?></h2>
    <table class="data-table" id="product-attribute-specs-table">
        <col width="25%" />
        <col />
        <tbody>
        <?php foreach ($_additional as $_data): ?>
        <?php if (substr($_data['code'], 0, 8) == 'warning_') {
                if ($_data['value'] == 'Yes') {
                    $_warning = true;
                }
            } else {
        ?>
            <tr>
                <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
                <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
            </tr>
        <?php } ?>
        <?php endforeach; ?>
        </tbody>
    </table>
    <script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
        <?php if ($_warning == true) { ?>
    <p>&nbsp;</p>
    <h2><?php echo $this->__('Warning') ?></h2>
    <table class="data-table" id="product-attribute-warning-table">
        <tbody>
        <?php foreach ($_additional as $_data): ?>
        <?php if (substr($_data['code'], 0, 8) == 'warning_' && $_data['value'] == 'Yes') { ?>
            <tr>
                <td class="data"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></td>
            </tr>
        <?php } ?>
        <?php endforeach; ?>
        </tbody>
    </table>
    <script type="text/javascript">decorateTable('product-attribute-warning-table')</script>
        <?php } ?>
<?php endif;?>
Feedback