Version Notes
All basic features included.
- It can handle full page caching.
- Exception handling has been added.
- Removed empty objects and arrays; Removed duplicated subcategories.
- Added product data for products on category and search pages.
- Fixed issue where configurable products have multiple product entries, and incorrect prices, in the cart object.
- Added more data into digitalData object so websites can be debugged.
- Configurable products have each of their configurations listed under 'linkedProduct'.
- Fixed bug that was breaking some styling.
- Added 'pageName' attribute and fixed type of 'returningStatus' object.
- Tweaks to configuration panel and default values.
- List of all installed non-Magento extensions are exposed (for debug purposes)
- Products associated with a Grouped Product have been included.
- Minimum prices of grouped and bundled products can be extracted.
- Output of debug data can now be controlled through admin configuration panel.
Release Info
Developer | Muhammed Miah |
Extension | W3CDigitalDataLayerByTriggeredMessaging |
Version | 0.3.8 |
Comparing to | |
See all releases |
Code changes from version 0.3.7 to 0.3.8
- app/code/community/TriggeredMessaging/DigitalDataLayer/Helper/Data.php +1 -1
- app/code/community/TriggeredMessaging/DigitalDataLayer/Model/Page/Observer.php +36 -30
- app/code/community/TriggeredMessaging/DigitalDataLayer/Model/System/Config/Source/Productattributes.php +1 -0
- app/code/community/TriggeredMessaging/DigitalDataLayer/etc/config.xml +1 -1
- app/design/frontend/base/default/template/triggeredmessaging/digital_data_layer.phtml +9 -1
- package.xml +4 -4
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
|
3 |
class TriggeredMessaging_DigitalDataLayer_Helper_Data extends Mage_Core_Helper_Abstract {
|
4 |
-
|
5 |
}
|
6 |
|
7 |
?>
|
1 |
<?php
|
2 |
|
3 |
class TriggeredMessaging_DigitalDataLayer_Helper_Data extends Mage_Core_Helper_Abstract {
|
4 |
+
|
5 |
}
|
6 |
|
7 |
?>
|
@@ -162,7 +162,13 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
162 |
/*
|
163 |
* Get information on pages to pass to front end
|
164 |
*/
|
165 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
public function getVersion() {
|
167 |
return $this->_version;
|
168 |
}
|
@@ -488,7 +494,7 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
488 |
$product_model['productInfo']['productThumbnail'] = $product->getThumbnailUrl();
|
489 |
}
|
490 |
//Attributes
|
491 |
-
if ($product->getWeight()) {
|
492 |
$product_model['attributes']['weight'] = floatval($product->getWeight());
|
493 |
}
|
494 |
try{
|
@@ -549,14 +555,14 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
549 |
|
550 |
// Price
|
551 |
$product_model['price'] = array();
|
552 |
-
if(!$product->getSpecialPrice()){
|
553 |
-
$product_model['price']['basePrice'] = floatval($product->getPrice());
|
554 |
} else {
|
555 |
-
$product_model['price']['basePrice'] = floatval($product->getSpecialPrice());
|
556 |
-
$product_model['price']['regularPrice'] = floatval($product->getPrice());
|
557 |
}
|
558 |
$product_model['price']['currency'] = $this->_getCurrency();
|
559 |
-
$product_model['price']['priceWithTax'] = floatval($product->getFinalPrice());
|
560 |
|
561 |
if (!$product_model['price']['priceWithTax']) {
|
562 |
unset( $product_model['price']['priceWithTax'] );
|
@@ -564,13 +570,13 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
564 |
|
565 |
// In case 'basePrice' did not exist
|
566 |
if (!$product_model['price']['basePrice']) {
|
567 |
-
$product_model['price']['basePrice'] = floatval($product->getGroupPrice());
|
568 |
}
|
569 |
if (!$product_model['price']['basePrice']) {
|
570 |
-
$product_model['price']['basePrice'] = floatval($product->getMinimalPrice());
|
571 |
}
|
572 |
if (!$product_model['price']['basePrice']) {
|
573 |
-
$product_model['price']['basePrice'] = floatval($product->getSpecialPrice());
|
574 |
}
|
575 |
if (!$product_model['price']['basePrice']) {
|
576 |
// Extract price for bundle products
|
@@ -584,7 +590,7 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
584 |
}
|
585 |
$_selection = $_option->getDefaultSelection();
|
586 |
if ($_selection === null) continue;
|
587 |
-
$normal_price += floatval($_selection->getPrice());
|
588 |
}
|
589 |
$product_model['price']['basePrice'] = $normal_price;
|
590 |
}
|
@@ -592,17 +598,17 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
592 |
|
593 |
if ($this->_debug) {
|
594 |
$product_model['price']['all'] = array();
|
595 |
-
$product_model['price']['all']['getPrice'] = $product->getPrice();
|
596 |
-
$product_model['price']['all']['getMinimalPrice'] = $product->getMinimalPrice();
|
597 |
$product_model['price']['all']['getPriceModel'] = $product->getPriceModel();
|
598 |
-
$product_model['price']['all']['getGroupPrice'] = $product->getGroupPrice();
|
599 |
$product_model['price']['all']['getTierPrice'] = $product->getTierPrice();
|
600 |
$product_model['price']['all']['getTierPriceCount'] = $product->getTierPriceCount();
|
601 |
$product_model['price']['all']['getFormatedTierPrice'] = $product->getFormatedTierPrice();
|
602 |
$product_model['price']['all']['getFormatedPrice'] = $product->getFormatedPrice();
|
603 |
-
$product_model['price']['all']['getFinalPrice'] = $product->getFinalPrice();
|
604 |
$product_model['price']['all']['getCalculatedFinalPrice'] = $product->getCalculatedFinalPrice();
|
605 |
-
$product_model['price']['all']['getSpecialPrice'] = $product->getSpecialPrice();
|
606 |
}
|
607 |
|
608 |
// Calculate Tax Rate
|
@@ -642,7 +648,7 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
642 |
$min_price = 0.0;
|
643 |
foreach($simple_collection as $simple_product){
|
644 |
array_push($product_model['linkedProduct'], $this->_getProductModel($simple_product, false));
|
645 |
-
$simple_product_price = floatval($simple_product->getPrice());
|
646 |
if ($simple_product_price && (!$min_price || $simple_product_price<$min_price)) {
|
647 |
$min_price = $simple_product_price;
|
648 |
}
|
@@ -650,7 +656,7 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
650 |
|
651 |
// If price could not be extracted before, can set it now
|
652 |
if (!$product_model['price']['basePrice']) {
|
653 |
-
$product_model['price']['basePrice'] = floatval($min_price);
|
654 |
}
|
655 |
|
656 |
if (!$product_model['linkedProduct']) {
|
@@ -772,17 +778,17 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
772 |
}
|
773 |
// $litem_model['price']['shipping'];
|
774 |
// $litem_model['price']['shippingMethod'] = $this->_extractShippingMethod($item->getQuote());
|
775 |
-
$litem_model['price']['priceWithTax'] = floatval($item->getBasePriceInclTax()); // TODO: This may be different from that in _getProductModel()
|
776 |
$litem_model['price']['cartTotal'] = floatval($item->getRowTotalInclTax());
|
777 |
|
778 |
if ($this->_debug) {
|
779 |
-
$litem_model['price']['all']['_getCalculationPrice'] = $product->getCalculationPrice();
|
780 |
-
$litem_model['price']['all']['_getCalculationPriceOriginal'] = $product->getCalculationPriceOriginal();
|
781 |
-
$litem_model['price']['all']['_getBaseCalculationPrice'] = $product->getBaseCalculationPrice();
|
782 |
-
$litem_model['price']['all']['_getBaseCalculationPriceOriginal'] = $product->getBaseCalculationPriceOriginal();
|
783 |
-
$litem_model['price']['all']['_getOriginalPrice'] = $product->getOriginalPrice();
|
784 |
-
$litem_model['price']['all']['_getBaseOriginalPrice'] = $product->getBaseOriginalPrice();
|
785 |
-
$litem_model['price']['all']['_getConvertedPrice'] = $product->getConvertedPrice();
|
786 |
}
|
787 |
|
788 |
// $litem_model['attributes'] = array();
|
@@ -882,7 +888,7 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
882 |
}
|
883 |
$cart['price'] = array();
|
884 |
if($quote->getBaseSubtotal()){
|
885 |
-
$cart['price']['basePrice'] = (
|
886 |
} else {
|
887 |
$cart['price']['basePrice'] = 0.0;
|
888 |
}
|
@@ -904,12 +910,12 @@ class TriggeredMessaging_DigitalDataLayer_Model_Page_Observer {
|
|
904 |
$cart['price']['shippingMethod'] = $this->_extractShippingMethod($quote);
|
905 |
}
|
906 |
if ($quote->getShippingAddress()->getTaxAmount() && $quote->getBaseSubtotal()){
|
907 |
-
$cart['price']['priceWithTax'] = (float) $quote->getShippingAddress()->getTaxAmount() + $quote->getBaseSubtotal();
|
908 |
} else {
|
909 |
$cart['price']['priceWithTax'] = 0.0;
|
910 |
}
|
911 |
-
if($quote->getGrandTotal()){
|
912 |
-
$cart['price']['cartTotal'] =
|
913 |
} else {
|
914 |
$cart['price']['cartTotal'] = 0.0;
|
915 |
}
|
162 |
/*
|
163 |
* Get information on pages to pass to front end
|
164 |
*/
|
165 |
+
public function getCurrentPrice($_price,$p1,$p2){
|
166 |
+
if($p1){
|
167 |
+
return number_format(Mage::helper('core')->currency((float)$_price,$p1,$p2),2,'.','');
|
168 |
+
} else {
|
169 |
+
return floatval(number_format(Mage::helper('core')->currency((float)$_price,$p1,$p2),2,'.',''));
|
170 |
+
}
|
171 |
+
}
|
172 |
public function getVersion() {
|
173 |
return $this->_version;
|
174 |
}
|
494 |
$product_model['productInfo']['productThumbnail'] = $product->getThumbnailUrl();
|
495 |
}
|
496 |
//Attributes
|
497 |
+
if ($product->getWeight() && in_array('weight',$this->_expAttr)) {
|
498 |
$product_model['attributes']['weight'] = floatval($product->getWeight());
|
499 |
}
|
500 |
try{
|
555 |
|
556 |
// Price
|
557 |
$product_model['price'] = array();
|
558 |
+
if(!$product->getSpecialPrice() || $product->getSpecialPrice()!==$product->getFinalPrice()){
|
559 |
+
$product_model['price']['basePrice'] = $this->getCurrentPrice(floatval($product->getPrice()),false,false);
|
560 |
} else {
|
561 |
+
$product_model['price']['basePrice'] = $this->getCurrentPrice(floatval($product->getSpecialPrice()),false,false);
|
562 |
+
$product_model['price']['regularPrice'] = $this->getCurrentPrice(floatval($product->getPrice()),false,false);
|
563 |
}
|
564 |
$product_model['price']['currency'] = $this->_getCurrency();
|
565 |
+
$product_model['price']['priceWithTax'] = $this->getCurrentPrice(floatval($product->getFinalPrice()),false,false);
|
566 |
|
567 |
if (!$product_model['price']['priceWithTax']) {
|
568 |
unset( $product_model['price']['priceWithTax'] );
|
570 |
|
571 |
// In case 'basePrice' did not exist
|
572 |
if (!$product_model['price']['basePrice']) {
|
573 |
+
$product_model['price']['basePrice'] = $this->getCurrentPrice(floatval($product->getGroupPrice()),false,false);
|
574 |
}
|
575 |
if (!$product_model['price']['basePrice']) {
|
576 |
+
$product_model['price']['basePrice'] = $this->getCurrentPrice(floatval($product->getMinimalPrice()),false,false);
|
577 |
}
|
578 |
if (!$product_model['price']['basePrice']) {
|
579 |
+
$product_model['price']['basePrice'] = $this->getCurrentPrice(floatval($product->getSpecialPrice()),false,false);
|
580 |
}
|
581 |
if (!$product_model['price']['basePrice']) {
|
582 |
// Extract price for bundle products
|
590 |
}
|
591 |
$_selection = $_option->getDefaultSelection();
|
592 |
if ($_selection === null) continue;
|
593 |
+
$normal_price += $this->getCurrentPrice(floatval($_selection->getPrice()),false,false);
|
594 |
}
|
595 |
$product_model['price']['basePrice'] = $normal_price;
|
596 |
}
|
598 |
|
599 |
if ($this->_debug) {
|
600 |
$product_model['price']['all'] = array();
|
601 |
+
$product_model['price']['all']['getPrice'] = $this->getCurrentPrice($product->getPrice(),false,false);
|
602 |
+
$product_model['price']['all']['getMinimalPrice'] = $this->getCurrentPrice($product->getMinimalPrice(),false,false);
|
603 |
$product_model['price']['all']['getPriceModel'] = $product->getPriceModel();
|
604 |
+
$product_model['price']['all']['getGroupPrice'] = $this->getCurrentPrice($product->getGroupPrice(),false,false);
|
605 |
$product_model['price']['all']['getTierPrice'] = $product->getTierPrice();
|
606 |
$product_model['price']['all']['getTierPriceCount'] = $product->getTierPriceCount();
|
607 |
$product_model['price']['all']['getFormatedTierPrice'] = $product->getFormatedTierPrice();
|
608 |
$product_model['price']['all']['getFormatedPrice'] = $product->getFormatedPrice();
|
609 |
+
$product_model['price']['all']['getFinalPrice'] = $this->getCurrentPrice($product->getFinalPrice(),false,false);
|
610 |
$product_model['price']['all']['getCalculatedFinalPrice'] = $product->getCalculatedFinalPrice();
|
611 |
+
$product_model['price']['all']['getSpecialPrice'] = $this->getCurrentPrice($product->getSpecialPrice(),false,false);
|
612 |
}
|
613 |
|
614 |
// Calculate Tax Rate
|
648 |
$min_price = 0.0;
|
649 |
foreach($simple_collection as $simple_product){
|
650 |
array_push($product_model['linkedProduct'], $this->_getProductModel($simple_product, false));
|
651 |
+
$simple_product_price = $this->getCurrentPrice(floatval($simple_product->getPrice()),false,false);
|
652 |
if ($simple_product_price && (!$min_price || $simple_product_price<$min_price)) {
|
653 |
$min_price = $simple_product_price;
|
654 |
}
|
656 |
|
657 |
// If price could not be extracted before, can set it now
|
658 |
if (!$product_model['price']['basePrice']) {
|
659 |
+
$product_model['price']['basePrice'] = $this->getCurrentPrice(floatval($min_price),false,false);
|
660 |
}
|
661 |
|
662 |
if (!$product_model['linkedProduct']) {
|
778 |
}
|
779 |
// $litem_model['price']['shipping'];
|
780 |
// $litem_model['price']['shippingMethod'] = $this->_extractShippingMethod($item->getQuote());
|
781 |
+
$litem_model['price']['priceWithTax'] = $this->getCurrentPrice(floatval($item->getBasePriceInclTax()),false,false); // TODO: This may be different from that in _getProductModel()
|
782 |
$litem_model['price']['cartTotal'] = floatval($item->getRowTotalInclTax());
|
783 |
|
784 |
if ($this->_debug) {
|
785 |
+
$litem_model['price']['all']['_getCalculationPrice'] = $this->getCurrentPrice($product->getCalculationPrice(),false,false);
|
786 |
+
$litem_model['price']['all']['_getCalculationPriceOriginal'] = $this->getCurrentPrice($product->getCalculationPriceOriginal(),false,false);
|
787 |
+
$litem_model['price']['all']['_getBaseCalculationPrice'] = $this->getCurrentPrice($product->getBaseCalculationPrice(),false,false);
|
788 |
+
$litem_model['price']['all']['_getBaseCalculationPriceOriginal'] = $this->getCurrentPrice($product->getBaseCalculationPriceOriginal(),false,false);
|
789 |
+
$litem_model['price']['all']['_getOriginalPrice'] = $this->getCurrentPrice($product->getOriginalPrice(),false,false);
|
790 |
+
$litem_model['price']['all']['_getBaseOriginalPrice'] = $this->getCurrentPrice($product->getBaseOriginalPrice(),false,false);
|
791 |
+
$litem_model['price']['all']['_getConvertedPrice'] = $this->getCurrentPrice($product->getConvertedPrice(),false,false);
|
792 |
}
|
793 |
|
794 |
// $litem_model['attributes'] = array();
|
888 |
}
|
889 |
$cart['price'] = array();
|
890 |
if($quote->getBaseSubtotal()){
|
891 |
+
$cart['price']['basePrice'] = $this->getCurrentPrice(floatval($quote->getBaseSubtotal()),false,false);
|
892 |
} else {
|
893 |
$cart['price']['basePrice'] = 0.0;
|
894 |
}
|
910 |
$cart['price']['shippingMethod'] = $this->_extractShippingMethod($quote);
|
911 |
}
|
912 |
if ($quote->getShippingAddress()->getTaxAmount() && $quote->getBaseSubtotal()){
|
913 |
+
$cart['price']['priceWithTax'] = (float) $quote->getShippingAddress()->getTaxAmount() + $this->getCurrentPrice($quote->getBaseSubtotal(),false,false);
|
914 |
} else {
|
915 |
$cart['price']['priceWithTax'] = 0.0;
|
916 |
}
|
917 |
+
if($quote->getGrandTotal() && $quote->getGrandTotal()<0){
|
918 |
+
$cart['price']['cartTotal'] = (float) $quote->getGrandTotal();
|
919 |
} else {
|
920 |
$cart['price']['cartTotal'] = 0.0;
|
921 |
}
|
@@ -20,6 +20,7 @@ class TriggeredMessaging_DigitalDataLayer_Model_System_Config_Source_Productattr
|
|
20 |
}
|
21 |
break;
|
22 |
}
|
|
|
23 |
return $attributeArray;
|
24 |
}
|
25 |
}
|
20 |
}
|
21 |
break;
|
22 |
}
|
23 |
+
array_push($attributeArray,array('label' => 'weight','value' => weight));
|
24 |
return $attributeArray;
|
25 |
}
|
26 |
}
|
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<TriggeredMessaging_DigitalDataLayer>
|
5 |
-
<version>0.3.
|
6 |
</TriggeredMessaging_DigitalDataLayer>
|
7 |
</modules>
|
8 |
|
2 |
<config>
|
3 |
<modules>
|
4 |
<TriggeredMessaging_DigitalDataLayer>
|
5 |
+
<version>0.3.8</version>
|
6 |
</TriggeredMessaging_DigitalDataLayer>
|
7 |
</modules>
|
8 |
|
@@ -19,6 +19,8 @@
|
|
19 |
$listing = $mage->getListing();
|
20 |
$transaction = $mage->getTransaction();
|
21 |
$events = $mage->getEvents();
|
|
|
|
|
22 |
?>
|
23 |
<?php
|
24 |
try {
|
@@ -55,6 +57,12 @@ try {
|
|
55 |
<?php if ($events): ?>
|
56 |
window.digitalData.events = <?php echo json_encode($events); ?>;
|
57 |
<?php endif; ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
} catch(e) {
|
59 |
}
|
60 |
</script>
|
@@ -77,4 +85,4 @@ console.log("You have enabled the Triggered Messaging script from the Magento Ad
|
|
77 |
<!-- Triggered Messaging Script End -->
|
78 |
<?php endif;?>
|
79 |
|
80 |
-
<?php } catch (Exception $e) {} ?>
|
19 |
$listing = $mage->getListing();
|
20 |
$transaction = $mage->getTransaction();
|
21 |
$events = $mage->getEvents();
|
22 |
+
$pluginVersion = (string) Mage::getConfig()->getNode()->modules->TriggeredMessaging_DigitalDataLayer->version;
|
23 |
+
$timeStamp = time() * 1000;
|
24 |
?>
|
25 |
<?php
|
26 |
try {
|
57 |
<?php if ($events): ?>
|
58 |
window.digitalData.events = <?php echo json_encode($events); ?>;
|
59 |
<?php endif; ?>
|
60 |
+
<?php if ($pluginVersion): ?>
|
61 |
+
window.digitalData.pluginVersion = <?php echo json_encode($pluginVersion); ?>;
|
62 |
+
<?php endif; ?>
|
63 |
+
<?php if ($timeStamp): ?>
|
64 |
+
window.digitalData.generatedDate = <?php echo json_encode($timeStamp); ?>;
|
65 |
+
<?php endif; ?>
|
66 |
} catch(e) {
|
67 |
}
|
68 |
</script>
|
85 |
<!-- Triggered Messaging Script End -->
|
86 |
<?php endif;?>
|
87 |
|
88 |
+
<?php } catch (Exception $e) {} ?>
|
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>W3CDigitalDataLayerByTriggeredMessaging</name>
|
4 |
-
<version>0.3.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/apachepl.php">Apache Software License v2</license>
|
7 |
<channel>community</channel>
|
@@ -29,9 +29,9 @@ https://github.com/TriggeredMessaging/digitalDataMagentoExtension/issues</descri
|
|
29 |
- Minimum prices of grouped and bundled products can be extracted.
|
30 |
- Output of debug data can now be controlled through admin configuration panel.</notes>
|
31 |
<authors><author><name>Muhammed Miah</name><user>momiah1234</user><email>muhammed.miah@triggeredmessaging.com</email></author><author><name>Triggered Messaging</name><user>tmsdemo</user><email>demostore@triggeredmessaging.com</email></author><author><name>Mike Austin</name><user>tmsdemo</user><email>dev@triggeredmessaging.com</email></author></authors>
|
32 |
-
<date>
|
33 |
-
<time>
|
34 |
-
<contents><target name="magecommunity"><dir name="TriggeredMessaging"><dir name="DigitalDataLayer"><dir name="Block"><file name="Ddl.php" hash="134766e2a49c3ecfbf03d1025dd41e8b"/></dir><dir name="Helper"><file name="Data.php" hash="
|
35 |
<compatible/>
|
36 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
37 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>W3CDigitalDataLayerByTriggeredMessaging</name>
|
4 |
+
<version>0.3.8</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/apachepl.php">Apache Software License v2</license>
|
7 |
<channel>community</channel>
|
29 |
- Minimum prices of grouped and bundled products can be extracted.
|
30 |
- Output of debug data can now be controlled through admin configuration panel.</notes>
|
31 |
<authors><author><name>Muhammed Miah</name><user>momiah1234</user><email>muhammed.miah@triggeredmessaging.com</email></author><author><name>Triggered Messaging</name><user>tmsdemo</user><email>demostore@triggeredmessaging.com</email></author><author><name>Mike Austin</name><user>tmsdemo</user><email>dev@triggeredmessaging.com</email></author></authors>
|
32 |
+
<date>2015-01-26</date>
|
33 |
+
<time>11:25:01</time>
|
34 |
+
<contents><target name="magecommunity"><dir name="TriggeredMessaging"><dir name="DigitalDataLayer"><dir name="Block"><file name="Ddl.php" hash="134766e2a49c3ecfbf03d1025dd41e8b"/></dir><dir name="Helper"><file name="Data.php" hash="fa334484ed3023bc029917dc4b63fdc7"/></dir><dir name="Model"><dir name="Container"><file name="Ddl.php" hash="cc9dcd8cf4e460a01c242ac675ce5634"/></dir><file name="Observer.php" hash="26e0dcfc7a19d5310e44e004c144c23e"/><dir name="Page"><file name="Observer.php" hash="dc7423c362365db44ddab59e507fc69f"/></dir><dir name="System"><dir name="Config"><dir name="Source"><file name="Productattributes.php" hash="9b10a36c5db2142737368a33bf949f5b"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="8b98dee82241e0b69661bf4699cba334"/><file name="cache.xml" hash="1b6658073a8126cd655cb18109559f49"/><file name="config.xml" hash="1a25d798b4941001e11536212abdbb98"/><file name="system.xml" hash="c11c84c7ca24fec850ac87c87791fb03"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="triggeredmessaging"><file name="digital_data_layer.phtml" hash="c50ea48f04f516eb9a5e171cb4cd7ec8"/><file name="digital_data_layer_after_content.phtml" hash="c28cb1ee3d5cfd761ca7aeb6dae9df20"/></dir></dir><dir name="layout"><dir name="triggeredmessaging"><file name="digital_data_layer.xml" hash="3c58b9faec1d9c63e1fb0a3fcc35a2d8"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="TriggeredMessaging_DigitalDataLayer.xml" hash="cfc3b1bff54f3e1f224f120e536bc411"/></dir></target></contents>
|
35 |
<compatible/>
|
36 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
37 |
</package>
|