Version Notes
- Fix currency format issue.
- Fix products in all caps not importing.
- Enforce UTF-8 in product feed.
- Fix product images not appearing for some stores.
- Fix product prices importing as 0 for some stores.
Download this release
Release Info
| Developer | Jordan Rogers-Smith |
| Extension | Facebook_Ads_Toolbox |
| Version | 2.1.6 |
| Comparing to | |
| See all releases | |
Code changes from version 2.1.5 to 2.1.6
- app/code/community/Facebook/AdsToolbox/Block/Adminhtml/Diaindex.php +13 -1
- app/code/community/Facebook/AdsToolbox/Block/Adminhtml/Pixelindex.php +1 -9
- app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeed.php +98 -17
- app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeedSamples.php +1 -0
- app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeedTSV.php +0 -4
- app/code/community/Facebook/AdsToolbox/etc/config.xml +1 -1
- app/code/community/Facebook/AdsToolbox/lib/fb.php +13 -0
- app/design/adminhtml/default/default/template/facebookadstoolbox/dia_index.phtml +2 -1
- package.xml +9 -7
app/code/community/Facebook/AdsToolbox/Block/Adminhtml/Diaindex.php
CHANGED
|
@@ -42,7 +42,7 @@ class Facebook_AdsToolbox_Block_Adminhtml_Diaindex
|
|
| 42 |
}
|
| 43 |
|
| 44 |
public function fetchStoreName() {
|
| 45 |
-
return
|
| 46 |
}
|
| 47 |
|
| 48 |
public function fetchStoreTimezone() {
|
|
@@ -122,4 +122,16 @@ class Facebook_AdsToolbox_Block_Adminhtml_Diaindex
|
|
| 122 |
}
|
| 123 |
return false;
|
| 124 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
}
|
| 42 |
}
|
| 43 |
|
| 44 |
public function fetchStoreName() {
|
| 45 |
+
return FacebookAdsToolbox::getStoreName();
|
| 46 |
}
|
| 47 |
|
| 48 |
public function fetchStoreTimezone() {
|
| 122 |
}
|
| 123 |
return false;
|
| 124 |
}
|
| 125 |
+
|
| 126 |
+
public function getModuleList() {
|
| 127 |
+
$modules = Mage::getConfig()->getNode('modules')->children();
|
| 128 |
+
$simple_module_list = array();
|
| 129 |
+
foreach ($modules as $moduleName => $moduleSettings) {
|
| 130 |
+
$active = $moduleSettings->is('active') ? "active" : "disabled";
|
| 131 |
+
$version_key = 'version';
|
| 132 |
+
$module = $moduleName . ", " . $active . ", " . $moduleSettings->$version_key;
|
| 133 |
+
array_push($simple_module_list, $module);
|
| 134 |
+
}
|
| 135 |
+
return implode('; ', $simple_module_list);
|
| 136 |
+
}
|
| 137 |
}
|
app/code/community/Facebook/AdsToolbox/Block/Adminhtml/Pixelindex.php
CHANGED
|
@@ -23,17 +23,9 @@ class Facebook_AdsToolbox_Block_Adminhtml_Pixelindex
|
|
| 23 |
}
|
| 24 |
|
| 25 |
public function fetchStoreName() {
|
| 26 |
-
|
| 27 |
-
// store, we have to do this. -StackOverflow
|
| 28 |
-
$frontendName = Mage::app()->getStore()->getFrontendName();
|
| 29 |
-
$homePageTitle = Mage::getModel('cms/page')->load('home','identifier')->getTitle();
|
| 30 |
-
$defaultStoreId = Mage::app()->getWebsite(true)->getDefaultGroup()->getDefaultStoreId();
|
| 31 |
-
$defaultStoreName = Mage::getModel('core/store')->load($defaultStoreId)->getGroup()->getName();
|
| 32 |
-
return $frontendName . ' ; ' . $homePageTitle . ' ; ' . $defaultStoreName;
|
| 33 |
}
|
| 34 |
|
| 35 |
-
|
| 36 |
-
|
| 37 |
public function fetchTimezone() {
|
| 38 |
return $this->determineFbTimeZone(
|
| 39 |
Mage::getStoreConfig('general/locale/timezone')
|
| 23 |
}
|
| 24 |
|
| 25 |
public function fetchStoreName() {
|
| 26 |
+
FacebookAdsToolbox::getStoreName();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
}
|
| 28 |
|
|
|
|
|
|
|
| 29 |
public function fetchTimezone() {
|
| 30 |
return $this->determineFbTimeZone(
|
| 31 |
Mage::getStoreConfig('general/locale/timezone')
|
app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeed.php
CHANGED
|
@@ -53,7 +53,11 @@ class FacebookProductFeed {
|
|
| 53 |
}
|
| 54 |
|
| 55 |
protected function defaultBrand() {
|
| 56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
}
|
| 58 |
|
| 59 |
protected function defaultCondition() {
|
|
@@ -110,7 +114,7 @@ class FacebookProductFeed {
|
|
| 110 |
$attr_value = substr($attr_value, 0, 5000);
|
| 111 |
}
|
| 112 |
// description can't be all uppercase
|
| 113 |
-
|
| 114 |
return $escapefn ? $this->$escapefn($attr_value) : $attr_value;
|
| 115 |
}
|
| 116 |
break;
|
|
@@ -180,16 +184,15 @@ class FacebookProductFeed {
|
|
| 180 |
$items[self::ATTR_LINK] = $this->buildProductAttr(self::ATTR_LINK,
|
| 181 |
FacebookAdsToolbox::getBaseUrl().
|
| 182 |
$product->getUrlPath());
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
|
|
|
| 186 |
|
| 187 |
$brand = null;
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
if (!$brand && $product->getData('manufacturer')) {
|
| 192 |
-
$brand = $this->buildProductAttr(self::ATTR_BRAND, $product->getAttributeText('manufacturer'));
|
| 193 |
}
|
| 194 |
$items[self::ATTR_BRAND] = ($brand) ? $brand : $this->defaultBrand();
|
| 195 |
|
|
@@ -200,13 +203,18 @@ class FacebookProductFeed {
|
|
| 200 |
$items[self::ATTR_CONDITION] = ($this->isValidCondition($condition)) ? $condition : $this->defaultCondition();
|
| 201 |
|
| 202 |
$items[self::ATTR_AVAILABILITY] = $this->buildProductAttr(self::ATTR_AVAILABILITY,
|
| 203 |
-
$stock->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 204 |
$items[self::ATTR_PRICE] = $this->buildProductAttr('price',
|
| 205 |
sprintf('%s %s',
|
| 206 |
-
|
| 207 |
-
$product->getFinalPrice(),
|
| 208 |
-
array('display'=>Zend_Currency::NO_SYMBOL),
|
| 209 |
-
false),
|
| 210 |
Mage::app()->getStore()->getDefaultCurrencyCode()));
|
| 211 |
|
| 212 |
$items[self::ATTR_SHORT_DESCRIPTION] = $this->buildProductAttr(self::ATTR_SHORT_DESCRIPTION,
|
|
@@ -252,6 +260,13 @@ class FacebookProductFeed {
|
|
| 252 |
private function writeProducts($io, $total_number_of_products, $should_log) {
|
| 253 |
$count = 0;
|
| 254 |
$batch_max = 100;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 255 |
while ($count < $total_number_of_products) {
|
| 256 |
if ($should_log) {
|
| 257 |
self::log(
|
|
@@ -388,8 +403,8 @@ class FacebookProductFeed {
|
|
| 388 |
}
|
| 389 |
|
| 390 |
private function uppercaseFirstOnlyIfAllCaps($string) {
|
| 391 |
-
// if contains non-western characters,
|
| 392 |
-
if (!preg_match('/[^\\p{Common}\\p{Latin}]/u', $string)) {
|
| 393 |
$latin_string = preg_replace('/[^\\p{Latin}]/u', '', $string);
|
| 394 |
if ($latin_string !== '' &&
|
| 395 |
mb_strtoupper($latin_string, 'utf-8') === $latin_string) {
|
|
@@ -398,4 +413,70 @@ class FacebookProductFeed {
|
|
| 398 |
}
|
| 399 |
return $string;
|
| 400 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 401 |
}
|
| 53 |
}
|
| 54 |
|
| 55 |
protected function defaultBrand() {
|
| 56 |
+
if (!isset($this->defaultBrand)) {
|
| 57 |
+
$this->defaultBrand =
|
| 58 |
+
$this->buildProductAttr(self::ATTR_BRAND, FacebookAdsToolbox::getStoreName());
|
| 59 |
+
}
|
| 60 |
+
return $this->defaultBrand;
|
| 61 |
}
|
| 62 |
|
| 63 |
protected function defaultCondition() {
|
| 114 |
$attr_value = substr($attr_value, 0, 5000);
|
| 115 |
}
|
| 116 |
// description can't be all uppercase
|
| 117 |
+
$attr_value = $this->uppercaseFirstOnlyIfAllCaps($attr_value);
|
| 118 |
return $escapefn ? $this->$escapefn($attr_value) : $attr_value;
|
| 119 |
}
|
| 120 |
break;
|
| 184 |
$items[self::ATTR_LINK] = $this->buildProductAttr(self::ATTR_LINK,
|
| 185 |
FacebookAdsToolbox::getBaseUrl().
|
| 186 |
$product->getUrlPath());
|
| 187 |
+
|
| 188 |
+
$items[self::ATTR_IMAGE_LINK] = $this->buildProductAttr(
|
| 189 |
+
self::ATTR_IMAGE_LINK,
|
| 190 |
+
$this->getImageURL($product));
|
| 191 |
|
| 192 |
$brand = null;
|
| 193 |
+
$brand = $this->getCorrectText($product, self::ATTR_BRAND, 'brand');
|
| 194 |
+
if (!$brand) {
|
| 195 |
+
$brand = $this->getCorrectText($product, self::ATTR_BRAND, 'manufacturer');
|
|
|
|
|
|
|
| 196 |
}
|
| 197 |
$items[self::ATTR_BRAND] = ($brand) ? $brand : $this->defaultBrand();
|
| 198 |
|
| 203 |
$items[self::ATTR_CONDITION] = ($this->isValidCondition($condition)) ? $condition : $this->defaultCondition();
|
| 204 |
|
| 205 |
$items[self::ATTR_AVAILABILITY] = $this->buildProductAttr(self::ATTR_AVAILABILITY,
|
| 206 |
+
$stock->getIsInStock() ? 'in stock' : 'out of stock');
|
| 207 |
+
|
| 208 |
+
$price = Mage::getModel('directory/currency')->format(
|
| 209 |
+
$this->getUpdatedPriceForConfigurableProduct($product),
|
| 210 |
+
array('display'=>Zend_Currency::NO_SYMBOL),
|
| 211 |
+
false);
|
| 212 |
+
if ($this->conversion_needed) {
|
| 213 |
+
$price = $this->convertCurrency($price);
|
| 214 |
+
}
|
| 215 |
$items[self::ATTR_PRICE] = $this->buildProductAttr('price',
|
| 216 |
sprintf('%s %s',
|
| 217 |
+
$price,
|
|
|
|
|
|
|
|
|
|
| 218 |
Mage::app()->getStore()->getDefaultCurrencyCode()));
|
| 219 |
|
| 220 |
$items[self::ATTR_SHORT_DESCRIPTION] = $this->buildProductAttr(self::ATTR_SHORT_DESCRIPTION,
|
| 260 |
private function writeProducts($io, $total_number_of_products, $should_log) {
|
| 261 |
$count = 0;
|
| 262 |
$batch_max = 100;
|
| 263 |
+
|
| 264 |
+
$locale_code = Mage::app()->getLocale()->getLocaleCode();
|
| 265 |
+
$symbols = Zend_Locale_Data::getList($locale_code, 'symbols');
|
| 266 |
+
$this->group_separator = $symbols['group'];
|
| 267 |
+
$this->decimal_separator = $symbols['decimal'];
|
| 268 |
+
$this->conversion_needed = $this->isCurrencyConversionNeeded();
|
| 269 |
+
|
| 270 |
while ($count < $total_number_of_products) {
|
| 271 |
if ($should_log) {
|
| 272 |
self::log(
|
| 403 |
}
|
| 404 |
|
| 405 |
private function uppercaseFirstOnlyIfAllCaps($string) {
|
| 406 |
+
// if contains lowercase or non-western characters, don't update string
|
| 407 |
+
if (!preg_match('/[a-z]/', $string) && !preg_match('/[^\\p{Common}\\p{Latin}]/u', $string)) {
|
| 408 |
$latin_string = preg_replace('/[^\\p{Latin}]/u', '', $string);
|
| 409 |
if ($latin_string !== '' &&
|
| 410 |
mb_strtoupper($latin_string, 'utf-8') === $latin_string) {
|
| 413 |
}
|
| 414 |
return $string;
|
| 415 |
}
|
| 416 |
+
|
| 417 |
+
private function getCorrectText($product, $column, $attribute) {
|
| 418 |
+
if ($product->getData($attribute)) {
|
| 419 |
+
$text = $this->buildProductAttr($column, $product->getAttributeText($attribute));
|
| 420 |
+
if (!$text) {
|
| 421 |
+
$text = $this->buildProductAttr($column, $product->getData($attribute));
|
| 422 |
+
}
|
| 423 |
+
return $text;
|
| 424 |
+
}
|
| 425 |
+
return null;
|
| 426 |
+
}
|
| 427 |
+
|
| 428 |
+
private function isCurrencyConversionNeeded() {
|
| 429 |
+
if ($this->group_separator !== ',' && $this->group_separator !== '.') {
|
| 430 |
+
return true;
|
| 431 |
+
} else if ($this->decimal_separator !== ',' &&
|
| 432 |
+
$this->decimal_separator !== '.') {
|
| 433 |
+
return true;
|
| 434 |
+
} else {
|
| 435 |
+
return false;
|
| 436 |
+
}
|
| 437 |
+
}
|
| 438 |
+
|
| 439 |
+
private function convertCurrency($price) {
|
| 440 |
+
$price = str_replace($this->group_separator, '', $price);
|
| 441 |
+
$price = str_replace($this->decimal_separator, '.', $price);
|
| 442 |
+
return $price;
|
| 443 |
+
}
|
| 444 |
+
|
| 445 |
+
private function getImageURL($product) {
|
| 446 |
+
$image_url = null;
|
| 447 |
+
$image = $product->getImage();
|
| 448 |
+
if (!$image || $image === '' || $image === 'no_selection') {
|
| 449 |
+
$product->load('media_gallery');
|
| 450 |
+
$gal = $product->getMediaGalleryImages();
|
| 451 |
+
if ($gal) {
|
| 452 |
+
foreach ($gal as $gal_image) {
|
| 453 |
+
if ($gal_image['url'] && $gal_image['url'] !== '') {
|
| 454 |
+
$image_url = $gal_image['url'];
|
| 455 |
+
break;
|
| 456 |
+
}
|
| 457 |
+
}
|
| 458 |
+
}
|
| 459 |
+
}
|
| 460 |
+
if (!$image_url) {
|
| 461 |
+
$image_url = FacebookAdsToolbox::getBaseUrlMedia().'catalog/product'.$image;
|
| 462 |
+
}
|
| 463 |
+
return $image_url;
|
| 464 |
+
}
|
| 465 |
+
|
| 466 |
+
private function getUpdatedPriceForConfigurableProduct($product) {
|
| 467 |
+
if ($product->getTypeId() === 'configurable') {
|
| 468 |
+
if ($product->getFinalPrice() === 0) {
|
| 469 |
+
$configurable = Mage::getModel('catalog/product_type_configurable')
|
| 470 |
+
->setProduct($product);
|
| 471 |
+
$simpleCollection = $configurable->getUsedProductCollection()
|
| 472 |
+
->addAttributeToSelect('price')->addFilterByRequiredOptions();
|
| 473 |
+
foreach ($simpleCollection as $simpleProduct) {
|
| 474 |
+
if ($simpleProduct->getPrice() > 0) {
|
| 475 |
+
return $simpleProduct->getPrice();
|
| 476 |
+
}
|
| 477 |
+
}
|
| 478 |
+
}
|
| 479 |
+
}
|
| 480 |
+
return $product->getFinalPrice();
|
| 481 |
+
}
|
| 482 |
}
|
app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeedSamples.php
CHANGED
|
@@ -16,6 +16,7 @@ class FacebookProductFeedSamples extends FacebookProductFeed {
|
|
| 16 |
|
| 17 |
public function generate() {
|
| 18 |
$MAX = 12;
|
|
|
|
| 19 |
|
| 20 |
$results = array();
|
| 21 |
|
| 16 |
|
| 17 |
public function generate() {
|
| 18 |
$MAX = 12;
|
| 19 |
+
$this->conversion_needed = false;
|
| 20 |
|
| 21 |
$results = array();
|
| 22 |
|
app/code/community/Facebook/AdsToolbox/Model/FacebookProductFeedTSV.php
CHANGED
|
@@ -30,10 +30,6 @@ class FacebookProductFeedTSV extends FacebookProductFeed {
|
|
| 30 |
return $this->buildProductAttrText($attr_name, $attr_value, 'tsvescape');
|
| 31 |
}
|
| 32 |
|
| 33 |
-
protected function defaultBrand() {
|
| 34 |
-
return 'original';
|
| 35 |
-
}
|
| 36 |
-
|
| 37 |
protected function defaultCondition() {
|
| 38 |
return 'new';
|
| 39 |
}
|
| 30 |
return $this->buildProductAttrText($attr_name, $attr_value, 'tsvescape');
|
| 31 |
}
|
| 32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
protected function defaultCondition() {
|
| 34 |
return 'new';
|
| 35 |
}
|
app/code/community/Facebook/AdsToolbox/etc/config.xml
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<Facebook_AdsToolbox>
|
| 5 |
-
<version>2.1.
|
| 6 |
</Facebook_AdsToolbox>
|
| 7 |
</modules>
|
| 8 |
<global>
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<Facebook_AdsToolbox>
|
| 5 |
+
<version>2.1.6</version>
|
| 6 |
</Facebook_AdsToolbox>
|
| 7 |
</modules>
|
| 8 |
<global>
|
app/code/community/Facebook/AdsToolbox/lib/fb.php
CHANGED
|
@@ -77,6 +77,19 @@ class FacebookAdsToolbox {
|
|
| 77 |
return $debug_key;
|
| 78 |
}
|
| 79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
public static $fbTimezones = array(
|
| 81 |
"africa_accra" => 59,
|
| 82 |
"africa_cairo" => 53,
|
| 77 |
return $debug_key;
|
| 78 |
}
|
| 79 |
|
| 80 |
+
public static function getStoreName() {
|
| 81 |
+
$frontendName = Mage::app()->getStore()->getFrontendName();
|
| 82 |
+
if ($frontendName !== 'Default') {
|
| 83 |
+
return $frontendName;
|
| 84 |
+
}
|
| 85 |
+
$defaultStoreId = Mage::app()->getWebsite(true)->getDefaultGroup()->getDefaultStoreId();
|
| 86 |
+
$defaultStoreName = Mage::getModel('core/store')->load($defaultStoreId)->getGroup()->getName();
|
| 87 |
+
if ($defaultStoreName !== 'Main Website Store' && $defaultStoreName !== 'Main Store') {
|
| 88 |
+
return $defaultStoreName;
|
| 89 |
+
}
|
| 90 |
+
return 'Original';
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
public static $fbTimezones = array(
|
| 94 |
"africa_accra" => 59,
|
| 95 |
"africa_cairo" => 53,
|
app/design/adminhtml/default/default/template/facebookadstoolbox/dia_index.phtml
CHANGED
|
@@ -15,12 +15,13 @@ window.facebookAdsToolboxConfig = {
|
|
| 15 |
,version: '<?php echo FacebookAdsToolbox::getMagentoVersion() ?>'
|
| 16 |
,plugin_version: '<?php echo FacebookAdsToolbox::version() ?>'
|
| 17 |
,debug_key: '<?php echo FacebookAdsToolbox::getDebugKey() ?>'
|
|
|
|
| 18 |
}
|
| 19 |
,feed: {
|
| 20 |
enabled: <?php echo $this->fetchFeedSetupEnabled() === 1 ? 'true' : 'false' ?>
|
| 21 |
,format: '<?php echo $this->fetchFeedSetupFormat() ?>'
|
| 22 |
,totalVisibleProducts: <?php echo $this->getTotalVisibleProducts() ?>
|
| 23 |
-
|
| 24 |
<?php if ($this->getDiaSettingId() != null) { ?>
|
| 25 |
,diaSettingId: <?php echo $this->getDiaSettingId() ?>
|
| 26 |
<?php } else { ?>
|
| 15 |
,version: '<?php echo FacebookAdsToolbox::getMagentoVersion() ?>'
|
| 16 |
,plugin_version: '<?php echo FacebookAdsToolbox::version() ?>'
|
| 17 |
,debug_key: '<?php echo FacebookAdsToolbox::getDebugKey() ?>'
|
| 18 |
+
,modules: '<?php echo $this->getModuleList() ?>'
|
| 19 |
}
|
| 20 |
,feed: {
|
| 21 |
enabled: <?php echo $this->fetchFeedSetupEnabled() === 1 ? 'true' : 'false' ?>
|
| 22 |
,format: '<?php echo $this->fetchFeedSetupFormat() ?>'
|
| 23 |
,totalVisibleProducts: <?php echo $this->getTotalVisibleProducts() ?>
|
| 24 |
+
}
|
| 25 |
<?php if ($this->getDiaSettingId() != null) { ?>
|
| 26 |
,diaSettingId: <?php echo $this->getDiaSettingId() ?>
|
| 27 |
<?php } else { ?>
|
package.xml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Facebook_Ads_Toolbox</name>
|
| 4 |
-
<version>2.1.
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="https://raw.githubusercontent.com/fbsamples/audience-network-support/master/LICENSE">Facebook License</license>
|
| 7 |
<channel>community</channel>
|
|
@@ -59,13 +59,15 @@ _Installation Instructions_
|
|
| 59 |

|
| 60 |
Additional FAQ
|
| 61 |
https://www.facebook.com/help/532749253576163</description>
|
| 62 |
-
<notes>- Fix
|
| 63 |
-
- Fix
|
| 64 |
-
-
|
|
|
|
|
|
|
| 65 |
<authors><author><name>Jordan Rogers-Smith</name><user>jordanrs</user><email>jordanrs@fb.com</email></author><author><name>Yu Li</name><user>liyuhk</user><email>liyuhk@fb.com</email></author><author><name>Dmitri Dranishnikov</name><user>dmitrid</user><email>dmitrid@fb.com</email></author></authors>
|
| 66 |
-
<date>2016-10-
|
| 67 |
-
<time>01:
|
| 68 |
-
<contents><target name="magecommunity"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="Block"><file name="AddToCart.php" hash="0bb7985b9079b8e70585aea350dc1524"/><dir name="Adminhtml"><file name="Diaindex.php" hash="
|
| 69 |
<compatible/>
|
| 70 |
<dependencies><required><php><min>5.3.0</min><max>8.0.0</max></php></required></dependencies>
|
| 71 |
</package>
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Facebook_Ads_Toolbox</name>
|
| 4 |
+
<version>2.1.6</version>
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="https://raw.githubusercontent.com/fbsamples/audience-network-support/master/LICENSE">Facebook License</license>
|
| 7 |
<channel>community</channel>
|
| 59 |

|
| 60 |
Additional FAQ
|
| 61 |
https://www.facebook.com/help/532749253576163</description>
|
| 62 |
+
<notes>- Fix currency format issue.
|
| 63 |
+
- Fix products in all caps not importing.
|
| 64 |
+
- Enforce UTF-8 in product feed.
|
| 65 |
+
- Fix product images not appearing for some stores.
|
| 66 |
+
- Fix product prices importing as 0 for some stores.</notes>
|
| 67 |
<authors><author><name>Jordan Rogers-Smith</name><user>jordanrs</user><email>jordanrs@fb.com</email></author><author><name>Yu Li</name><user>liyuhk</user><email>liyuhk@fb.com</email></author><author><name>Dmitri Dranishnikov</name><user>dmitrid</user><email>dmitrid@fb.com</email></author></authors>
|
| 68 |
+
<date>2016-10-07</date>
|
| 69 |
+
<time>01:09:44</time>
|
| 70 |
+
<contents><target name="magecommunity"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="Block"><file name="AddToCart.php" hash="0bb7985b9079b8e70585aea350dc1524"/><dir name="Adminhtml"><file name="Diaindex.php" hash="2a2cb521b88a48213938aee0d49d96ab"/><file name="Feedindex.php" hash="f08548f1c321e70fb4bebdf5fa6acc37"/><file name="Pixelindex.php" hash="ed25472f13e9dd8ec7e8c7f3378a198b"/></dir><file name="Head.php" hash="eb5ee970cfb6873b9def860232089460"/><file name="InitiateCheckout.php" hash="c47ed5209bed0ae4dbad120be1ba13b3"/><file name="Purchase.php" hash="0c65646369b87e6c818da4f3fdc0e155"/><file name="Search.php" hash="d8acaa72da8ca3df2146949276a3714d"/><file name="ViewCategory.php" hash="36e19e8ff10acbc862420ac8dc39fd05"/><file name="ViewContent.php" hash="38ced65dd84888045e3ef9f189124d0a"/><file name="common.php" hash="ed0e2a1dc8c84138dc6c728b2d428054"/></dir><dir name="Helper"><file name="Data.php" hash="09da04dbb30d6de8b7a873f0447456ba"/></dir><dir name="Model"><file name="FacebookProductFeed.php" hash="79602c9afe63954226d83317f166d2cc"/><file name="FacebookProductFeedSamples.php" hash="b79a1a2f4c857e2ed7b4971c3395406f"/><file name="FacebookProductFeedTSV.php" hash="acc22ecb0ba66117337a7250e1b2a940"/><file name="FacebookProductFeedXML.php" hash="f62f7630ffd1f34b5a062855da62865f"/><file name="Observer.php" hash="6ba9ee34820ad5b86480fba72a540310"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="FbfeedController.php" hash="a55045c8ad914584490d36f1410b0051"/><file name="FbfeedlogController.php" hash="34938878c691842a71f4f788c0b5cfee"/><file name="FbmainController.php" hash="b952bf87ca7b49a2b1fb256025e39331"/><file name="FbpixelController.php" hash="f00c250878671e6e4957239ddd952476"/><file name="FbregenController.php" hash="1837e42c7e6d4d9c77bb386732d08e28"/></dir><file name="DebugController.php" hash="cf3aa8f25e7c4301de9f5f908fca40e5"/><file name="ProductfeedController.php" hash="c9aedcb0b2d7d3ee66272fea143e8fd2"/></dir><dir name="etc"><file name="adminhtml.xml" hash="be7e9a1dfc20ca73654c8e4ac557e4c9"/><file name="config.xml" hash="de549b31c7e00bbb57ab6488919ca9c6"/></dir><dir name="lib"><file name="fb.php" hash="6ad2bc6155b4539c9e917a70fb009950"/></dir></dir><file name="LICENSE" hash="4e3837b373e2371aeb3317bc8d245ad6"/><file name="PATENTS" hash="7eb20d51ce76c08c2e6c939674e75c93"/></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="facebookadstoolbox.xml" hash="cd8d60f293f5d1b5925efe01c7e48af7"/></dir><dir name="template"><dir name="facebookadstoolbox"><file name="addtocart.phtml" hash="cffaf57c6b633e1c5641783f08769726"/><file name="head.phtml" hash="217c676e9f1893f17073904a62796016"/><file name="initiate_checkout.phtml" hash="0f57840eef0477538b211d63d6c6d3b5"/><file name="purchase.phtml" hash="278c3819865a6a8ef3c03cb1189e4a4c"/><file name="search.phtml" hash="a67005ea51ae63b225cb598cf9152014"/><file name="viewcategory.phtml" hash="c56f37ab17654b53ace6180903900cf3"/><file name="viewcontent.phtml" hash="ebf7844a601511d85135cfaf623a9bc1"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="facebookadstoolbox.xml" hash="5974bb612e16c7b7eff07ef06eddebda"/></dir><dir name="template"><dir name="facebookadstoolbox"><file name="dia_index.phtml" hash="839af71b1454571a41243e24cecc84ec"/><file name="feed_index.phtml" hash="157e56ef40e56378bcd07284162fb439"/><file name="pixel_index.phtml" hash="0b8e1171703bfb27ce5c768c6e79dc81"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="Adminhtml"><file name="dia.js" hash="eee4506b93da5703034f2b9f405d82b3"/><file name="feed.js" hash="134fbbb334e0d2422b77435dc105ebf5"/><dir name="lib"><file name="react-dom.min.js" hash="80dd76fff4872e658666dec43913360c"/><file name="react.min.js" hash="c3207f7bf39699d4279ba404ea55f163"/></dir><file name="pixel.js" hash="916afd85272d48e3b34c8f2a9f4db38a"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Facebook_AdsToolbox.xml" hash="164bc795b6911c5b0a6ca357a56f38cc"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="Facebook"><dir name="AdsToolbox"><dir><dir name="css"><dir name="Adminhtml"><file name="dia.css" hash="201b2a78305d44d6eeebbf67231e7767"/><file name="feed.css" hash="2763caa9c8f3b9b21f85a59915d39157"/><file name="pixel.css" hash="8b143487fcc4a902c0e44de8e2af6eef"/></dir></dir><dir name="images"><dir name="Adminhtml"><file name="buttonbg.png" hash="09adbacda0d592a215277230c48df285"/><file name="fbicons.png" hash="8f1b559a279a3785f1b2492a79f518d8"/></dir></dir></dir></dir></dir></dir></dir></dir></target></contents>
|
| 71 |
<compatible/>
|
| 72 |
<dependencies><required><php><min>5.3.0</min><max>8.0.0</max></php></required></dependencies>
|
| 73 |
</package>
|
