Amazon Associates Link Builder - Version 1.4.7

Version Description

Fix for the issue of trailing spaces in a few deafult templates, failed rendering due to expired ASIN and other minor bug fixes.

Download this release

Release Info

Developer amazonlinkbuilder
Plugin Icon 128x128 Amazon Associates Link Builder
Version 1.4.7
Comparing to
See all releases

Code changes from version 1.4.6 to 1.4.7

aalb_config.php CHANGED
@@ -13,7 +13,7 @@ and limitations under the License.
13
  */
14
 
15
  //version
16
- define( 'AALB_PLUGIN_CURRENT_VERSION', '1.4.6' );
17
 
18
  //PHP version compatible for AALB plugin
19
  define('AALB_PLUGIN_MINIMUM_SUPPORTED_PHP_VERSION','5.3.0');
@@ -180,6 +180,11 @@ define( 'PAAPI_SERVICE', 'AWSECommerceService' );
180
  define( 'PAAPI_VERSION', '2013-08-01' );
181
  define( 'PAAPI_URL_REGEX', '^https:\\/\\/(.*)\\/onca\\/xml\\?(.*)$' );
182
 
 
 
 
 
 
183
  //HTTP Status Codes
184
  define( 'HTTP_SUCCESS', '200' );
185
  define( 'HTTP_SUCCESS_MESSAGE', '<h4>Request Successful</h4>' );
@@ -193,6 +198,8 @@ define( 'HTTP_INTERNAL_SERVER_ERROR', '500' );
193
  define( 'HTTP_INTERNAL_SERVER_ERROR_MESSAGE', '<h4>Internal server error</h4>' );
194
  define( 'HTTP_THROTTLE', '503' );
195
  define( 'HTTP_THROTTLE_MESSAGE', '<h4>You are submitting requests too quickly. Please retry your requests at a slower rate. For more information, see <a href="http://docs.aws.amazon.com/AWSECommerceService/latest/DG/TroubleshootingApplications.html#efficiency-guidelines" target="_blank">Efficiency Guidelines</a>.</h4>' );
 
 
196
 
197
  /**
198
  * Cipher
@@ -240,19 +247,24 @@ define( 'UK', 'UK' );
240
 
241
  //Amazon URLs To be used in Aalb_Content_Filter.
242
  $AALB_AMAZON_DOMAINS = array(
243
- 'amazon\.com',
244
- 'amazon\.fr',
245
- 'amazon\.it',
246
- 'amazon\.de',
247
- 'amazon\.es',
248
- 'amazon\.com\.br',
249
- 'amazon\.ca',
250
- 'amazon\.cn',
251
- 'amazon\.in',
252
- 'amazon\.co\.jp',
253
- 'amazon\.com\.mx',
254
- 'amazon\.co\.uk',
255
- 'amzn\.to'
256
  );
257
 
 
 
 
 
 
258
  ?>
13
  */
14
 
15
  //version
16
+ define( 'AALB_PLUGIN_CURRENT_VERSION', '1.4.7' );
17
 
18
  //PHP version compatible for AALB plugin
19
  define('AALB_PLUGIN_MINIMUM_SUPPORTED_PHP_VERSION','5.3.0');
180
  define( 'PAAPI_VERSION', '2013-08-01' );
181
  define( 'PAAPI_URL_REGEX', '^https:\\/\\/(.*)\\/onca\\/xml\\?(.*)$' );
182
 
183
+ define('PAAPI_INVALID_PARAMETER_VALUE_ERROR', 'AWS.InvalidParameterValue');
184
+
185
+ // PAAPI Request Timeout in seconds
186
+ define("PAAPI_REQUEST_TIMEOUT", 35);
187
+
188
  //HTTP Status Codes
189
  define( 'HTTP_SUCCESS', '200' );
190
  define( 'HTTP_SUCCESS_MESSAGE', '<h4>Request Successful</h4>' );
198
  define( 'HTTP_INTERNAL_SERVER_ERROR_MESSAGE', '<h4>Internal server error</h4>' );
199
  define( 'HTTP_THROTTLE', '503' );
200
  define( 'HTTP_THROTTLE_MESSAGE', '<h4>You are submitting requests too quickly. Please retry your requests at a slower rate. For more information, see <a href="http://docs.aws.amazon.com/AWSECommerceService/latest/DG/TroubleshootingApplications.html#efficiency-guidelines" target="_blank">Efficiency Guidelines</a>.</h4>' );
201
+ define( 'HTTP_TIME_OUT', '504' );
202
+ define( 'HTTP_TIME_OUT_MESSAGE', '<h4>Request timed out. Try again after some time. Please check you network and firewall settings. If the error still persists, write to us at link-builder@amazon.com.</h4>' );
203
 
204
  /**
205
  * Cipher
247
 
248
  //Amazon URLs To be used in Aalb_Content_Filter.
249
  $AALB_AMAZON_DOMAINS = array(
250
+ 'amazon\.com',
251
+ 'amazon\.fr',
252
+ 'amazon\.it',
253
+ 'amazon\.de',
254
+ 'amazon\.es',
255
+ 'amazon\.com\.br',
256
+ 'amazon\.ca',
257
+ 'amazon\.cn',
258
+ 'amazon\.in',
259
+ 'amazon\.co\.jp',
260
+ 'amazon\.com\.mx',
261
+ 'amazon\.co\.uk',
262
+ 'amzn\.to'
263
  );
264
 
265
+ //Wordpress Server Timeout in milliseconds
266
+ define("AALB_WORDPRESS_REQUEST_TIMEOUT", 40000);
267
+
268
+ //Curl Timeout Error String
269
+ define('CURL_ERROR_TIMEOUT_STRING','cURL error 28');
270
  ?>
admin/aalb_admin.php CHANGED
@@ -94,7 +94,8 @@ class Aalb_Admin {
94
  'item_search_nonce' => wp_create_nonce( 'aalb-item-search-nonce' ),
95
  'AALB_SHORTCODE_AMAZON_LINK' => AALB_SHORTCODE_AMAZON_LINK,
96
  'AALB_SHORTCODE_AMAZON_TEXT' => AALB_SHORTCODE_AMAZON_TEXT,
97
- 'IS_PAAPI_CREDENTIALS_SET' => $this->aalb_is_paapi_credentials_set()
 
98
  );
99
  }
100
 
@@ -107,10 +108,11 @@ class Aalb_Admin {
107
  */
108
  private function get_aalb_strings() {
109
  return array(
110
- "template_asin_error" => "Only one product can be selected for template",
111
- "no_asin_selected_error" => "Please select at least one product for display",
112
- "empty_product_search_bar" => "Please Enter a Product Name ",
113
- "short_code_create_failure" => "Failed to create Text Link shortcode. Editor has some text selected. Only one item can be selected while adding text links"
 
114
  );
115
  }
116
 
94
  'item_search_nonce' => wp_create_nonce( 'aalb-item-search-nonce' ),
95
  'AALB_SHORTCODE_AMAZON_LINK' => AALB_SHORTCODE_AMAZON_LINK,
96
  'AALB_SHORTCODE_AMAZON_TEXT' => AALB_SHORTCODE_AMAZON_TEXT,
97
+ 'IS_PAAPI_CREDENTIALS_SET' => $this->aalb_is_paapi_credentials_set(),
98
+ 'WORDPRESS_REQUEST_TIMEOUT' => AALB_WORDPRESS_REQUEST_TIMEOUT
99
  );
100
  }
101
 
108
  */
109
  private function get_aalb_strings() {
110
  return array(
111
+ "template_asin_error" => "Only one product can be selected for template",
112
+ "no_asin_selected_error" => "Please select at least one product for display",
113
+ "empty_product_search_bar" => "Please Enter a Product Name ",
114
+ "short_code_create_failure" => "Failed to create Text Link shortcode. Editor has some text selected. Only one item can be selected while adding text links",
115
+ "paapi_request_timeout_error" => HTTP_TIME_OUT_MESSAGE
116
  );
117
  }
118
 
admin/js/aalb_admin.js CHANGED
@@ -185,68 +185,81 @@ function aalb_admin_popup_search_items() {
185
  function aalb_admin_get_item_search_items( keywords ) {
186
  marketplace = aalb_get_selected_marketplace();
187
  marketplace = marketplace ? marketplace : api_pref.marketplace;
188
- jQuery.get( api_pref.ajax_url, {
189
- "action": api_pref.action,
190
- "item_search_nonce": api_pref.item_search_nonce,
191
- "keywords": keywords,
192
- "marketplace": marketplace,
193
- "store_id": api_pref.store_id
194
- }, function( xml ) {
195
- var items_xml = jQuery( xml ).find( "Item" );
196
- if ( items_xml.length > 0 ) {
197
- var items = [];
198
- var i = 0;
199
- items_xml.each( function() {
200
- //selecting maximum of max_search_result_items elements
201
- if ( i < api_pref.max_search_result_items ) {
202
- var item = {};
203
- item.asin = jQuery( this ).find( "ASIN" ).text();
204
- item.title = jQuery( this ).find( "Title" ).text();
205
- item.image = jQuery( this ).find( "LargeImage" ).first().find( "URL" ).text();
206
- item.price = jQuery( this ).find( "LowestNewPrice" ).find( "FormattedPrice" ).text();
207
- items.push( item );
208
- }
209
- i++;
210
- } );
211
-
212
- var html = template( items );
213
- jQuery( ".aalb-admin-item-search-items" ).append( html );
214
- jQuery( "#aalb-admin-popup-more-results" ).attr( 'href', jQuery( xml ).find( "MoreSearchResultsUrl" ).text() );
215
- jQuery( ".aalb-admin-item-search-loading" ).slideUp( "slow" );
216
- jQuery( ".aalb-admin-item-search" ).fadeIn( "slow" );
217
- jQuery( ".aalb-admin-item-search-items-item" ).on( "click", function() {
218
-
219
- var data_asin = jQuery( this ).attr( "data-asin" );
220
- //return on duplicate asin selected
221
- if( !aalb_validate_asins( data_asin, 'add' ) ) {
222
- return;
223
- }
224
- var productImage = jQuery( this ).find( "img" ).attr( "src" );
225
- var productTitle = jQuery( this ).find( "div.aalb-admin-item-search-items-item-title" ).text();
226
- var productPrice = jQuery( this ).find( "div.aalb-admin-item-search-items-item-price" ).text();
227
-
228
- var selectedAsinHTML = '<div class="aalb-selected-item" onclick="aalb_remove_asin(this)"';
229
- selectedAsinHTML += ' data-asin="' + data_asin + '">';
230
- selectedAsinHTML += '<div class="aalb-selected-item-img-wrap"><span class="aalb-selected-item-close">&times;</span>';
231
- selectedAsinHTML += '<img class="aalb-selected-item-img" src="' + productImage + '"></img></div>';
232
- selectedAsinHTML += '<div class="aalb-selected-item-title"><h3>' + productTitle + '</h3>';
233
- selectedAsinHTML += '<p class="aalb-selected-item-price">' + productPrice + '<br></p></div>';
234
-
235
- jQuery( ".aalb-selected" ).append( selectedAsinHTML );
236
- } );
237
- } else {
238
- errors_xml = jQuery( xml ).find( "Error" );
239
- if ( errors_xml.length > 0 ) {
240
- var htmlerror = "";
241
- errors_xml.each( function() {
242
- htmlerror += jQuery( this ).find( "Message" ).text() + "<br>";
243
  } );
244
- jQuery( ".aalb-admin-item-search-loading" ).html( htmlerror );
245
  } else {
246
- jQuery( ".aalb-admin-item-search-loading" ).html( xml );
 
 
 
 
 
 
 
 
 
247
  }
248
- }
249
- } );
 
 
 
 
 
 
 
 
250
  jQuery( "#aalb-add-shortcode-button" ).unbind().click( function() {
251
  var selectedAsins = aalb_get_selected_asins();
252
  var selected = aalb_get_selected_text_from_editor();
185
  function aalb_admin_get_item_search_items( keywords ) {
186
  marketplace = aalb_get_selected_marketplace();
187
  marketplace = marketplace ? marketplace : api_pref.marketplace;
188
+ jQuery.ajax({
189
+ url: api_pref.ajax_url,
190
+ type: 'GET',
191
+ data: {
192
+ "action": api_pref.action,
193
+ "item_search_nonce": api_pref.item_search_nonce,
194
+ "keywords": keywords,
195
+ "marketplace": marketplace,
196
+ "store_id": api_pref.store_id
197
+ },
198
+ success: function( xml ) {
199
+ var items_xml = jQuery( xml ).find( "Item" );
200
+ if ( items_xml.length > 0 ) {
201
+ var items = [];
202
+ var i = 0;
203
+ items_xml.each( function() {
204
+ //selecting maximum of max_search_result_items elements
205
+ if ( i < api_pref.max_search_result_items ) {
206
+ var item = {};
207
+ item.asin = jQuery( this ).find( "ASIN" ).text();
208
+ item.title = jQuery( this ).find( "Title" ).text();
209
+ item.image = jQuery( this ).find( "LargeImage" ).first().find( "URL" ).text();
210
+ item.price = jQuery( this ).find( "LowestNewPrice" ).find( "FormattedPrice" ).text();
211
+ items.push( item );
212
+ }
213
+ i++;
214
+ } );
215
+
216
+ var html = template( items );
217
+ jQuery( ".aalb-admin-item-search-items" ).append( html );
218
+ jQuery( "#aalb-admin-popup-more-results" ).attr( 'href', jQuery( xml ).find( "MoreSearchResultsUrl" ).text() );
219
+ jQuery( ".aalb-admin-item-search-loading" ).slideUp( "slow" );
220
+ jQuery( ".aalb-admin-item-search" ).fadeIn( "slow" );
221
+ jQuery( ".aalb-admin-item-search-items-item" ).on( "click", function() {
222
+
223
+ var data_asin = jQuery( this ).attr( "data-asin" );
224
+ //return on duplicate asin selected
225
+ if( !aalb_validate_asins( data_asin, 'add' ) ) {
226
+ return;
227
+ }
228
+ var productImage = jQuery( this ).find( "img" ).attr( "src" );
229
+ var productTitle = jQuery( this ).find( "div.aalb-admin-item-search-items-item-title" ).text();
230
+ var productPrice = jQuery( this ).find( "div.aalb-admin-item-search-items-item-price" ).text();
231
+
232
+ var selectedAsinHTML = '<div class="aalb-selected-item" onclick="aalb_remove_asin(this)"';
233
+ selectedAsinHTML += ' data-asin="' + data_asin + '">';
234
+ selectedAsinHTML += '<div class="aalb-selected-item-img-wrap"><span class="aalb-selected-item-close">&times;</span>';
235
+ selectedAsinHTML += '<img class="aalb-selected-item-img" src="' + productImage + '"></img></div>';
236
+ selectedAsinHTML += '<div class="aalb-selected-item-title"><h3>' + productTitle + '</h3>';
237
+ selectedAsinHTML += '<p class="aalb-selected-item-price">' + productPrice + '<br></p></div>';
238
+
239
+ jQuery( ".aalb-selected" ).append( selectedAsinHTML );
 
 
 
240
  } );
 
241
  } else {
242
+ errors_xml = jQuery( xml ).find( "Error" );
243
+ if ( errors_xml.length > 0 ) {
244
+ var htmlerror = "";
245
+ errors_xml.each( function() {
246
+ htmlerror += jQuery( this ).find( "Message" ).text() + "<br>";
247
+ } );
248
+ jQuery( ".aalb-admin-item-search-loading" ).html( htmlerror );
249
+ } else {
250
+ jQuery( ".aalb-admin-item-search-loading" ).html( xml );
251
+ }
252
  }
253
+ },
254
+ error: function( request, status ) {
255
+ if( status === "timeout" ) {
256
+ jQuery( ".aalb-admin-item-search-loading" ).html( aalb_strings.paapi_request_timeout_error );
257
+ } else {
258
+ jQuery( ".aalb-admin-item-search-loading" ).html( "An Error Occurred : " + status );
259
+ }
260
+ },
261
+ timeout: api_pref.WORDPRESS_REQUEST_TIMEOUT
262
+ });
263
  jQuery( "#aalb-add-shortcode-button" ).unbind().click( function() {
264
  var selectedAsins = aalb_get_selected_asins();
265
  var selected = aalb_get_selected_text_from_editor();
amazon-associates-link-builder.php CHANGED
@@ -7,7 +7,7 @@
7
  /*
8
  Plugin Name: Amazon Associates Link Builder
9
  Description: Amazon Associates Link Builder is the official free Amazon Associates Program plugin for WordPress. The plugin enables you to search for products in the Amazon catalog, access real-time price and availability information, and easily create links in your posts to products on Amazon.com. You will be able to generate text links, create custom ad units, or take advantage of out-of-the-box widgets that we’ve designed and included with the plugin.
10
- Version: 1.4.6
11
  Author: Amazon Associates Program
12
  Author URI: https://affiliate-program.amazon.com/
13
  License: GPLv2
7
  /*
8
  Plugin Name: Amazon Associates Link Builder
9
  Description: Amazon Associates Link Builder is the official free Amazon Associates Program plugin for WordPress. The plugin enables you to search for products in the Amazon catalog, access real-time price and availability information, and easily create links in your posts to products on Amazon.com. You will be able to generate text links, create custom ad units, or take advantage of out-of-the-box widgets that we’ve designed and included with the plugin.
10
+ Version: 1.4.7
11
  Author: Amazon Associates Program
12
  Author URI: https://affiliate-program.amazon.com/
13
  License: GPLv2
includes/aalb_content_filter.php CHANGED
@@ -46,6 +46,13 @@ class Aalb_Content_Filter {
46
  */
47
 
48
  function filter( $content ) {
 
 
 
 
 
 
 
49
 
50
  $document = new DomDocument();
51
 
46
  */
47
 
48
  function filter( $content ) {
49
+ /**
50
+ * To avoid "Warning: DOMDocument::loadHTML(): Empty string supplied as input".
51
+ * Warning is not shown if content contains only whitespaces or/and newlines.
52
+ */
53
+ if( is_null( $content) || $content === "" ) {
54
+ return $content;
55
+ }
56
 
57
  $document = new DomDocument();
58
 
includes/aalb_remote_loader.php CHANGED
@@ -48,7 +48,7 @@ class Aalb_Remote_Loader {
48
  * @return string GET Response.
49
  */
50
  private function fetch( $url ) {
51
- return wp_remote_get( $url );
52
  }
53
 
54
  /**
@@ -64,6 +64,9 @@ class Aalb_Remote_Loader {
64
  private function verify( $response ) {
65
  if ( is_wp_error( $response ) ) {
66
  $error_message = $response->get_error_message();
 
 
 
67
  throw new Exception( 'HTTP Request failed! ' . $error_message );
68
  }
69
  $code = $response['response']['code'];
48
  * @return string GET Response.
49
  */
50
  private function fetch( $url ) {
51
+ return wp_remote_get( $url, array( 'timeout' => PAAPI_REQUEST_TIMEOUT ) );
52
  }
53
 
54
  /**
64
  private function verify( $response ) {
65
  if ( is_wp_error( $response ) ) {
66
  $error_message = $response->get_error_message();
67
+ if( strpos ( $error_message, CURL_ERROR_TIMEOUT_STRING ) !== false ) {
68
+ throw new Exception( HTTP_TIME_OUT );
69
+ }
70
  throw new Exception( 'HTTP Request failed! ' . $error_message );
71
  }
72
  $code = $response['response']['code'];
includes/aalb_template_engine.php CHANGED
@@ -97,13 +97,26 @@ class Aalb_Template_Engine {
97
  throw new Exception( 'Failed Loading XML' );
98
  }
99
 
100
- if ( isset( $xml->Items->Request->Errors->Error ) ) {
101
  throw new Exception( $xml->Items->Request->Errors->Error->Code );
102
  }
103
 
104
  return $xml;
105
  }
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  /**
108
  * Return the Item attribute contained in the xml.
109
  *
97
  throw new Exception( 'Failed Loading XML' );
98
  }
99
 
100
+ if ( $this->should_not_render_xml( $xml ) ) {
101
  throw new Exception( $xml->Items->Request->Errors->Error->Code );
102
  }
103
 
104
  return $xml;
105
  }
106
 
107
+ /**
108
+ * Whether to allow xml to be rendered
109
+ *
110
+ * @since 1.4.7
111
+ *
112
+ * @param SimpleXMLElement $xml Well-formed XML string
113
+ *
114
+ * @return boolean
115
+ */
116
+ private function should_not_render_xml( $xml ) {
117
+ return isset( $xml->Items->Request->Errors->Error ) && !( $xml->Items->Request->Errors->Error->Code == PAAPI_INVALID_PARAMETER_VALUE_ERROR && isset( $xml->Items->Item ) );
118
+ }
119
+
120
  /**
121
  * Return the Item attribute contained in the xml.
122
  *
lib/php/Paapi/aalb_paapi_helper.php CHANGED
@@ -119,6 +119,8 @@ class Aalb_Paapi_Helper {
119
  return HTTP_INTERNAL_SERVER_ERROR_MESSAGE;
120
  case HTTP_THROTTLE:
121
  return HTTP_THROTTLE_MESSAGE;
 
 
122
  default:
123
  return $error;
124
  }
119
  return HTTP_INTERNAL_SERVER_ERROR_MESSAGE;
120
  case HTTP_THROTTLE:
121
  return HTTP_THROTTLE_MESSAGE;
122
+ case HTTP_TIME_OUT:
123
+ return HTTP_TIME_OUT_MESSAGE;
124
  default:
125
  return $error;
126
  }
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: amazonlinkbuilder
3
  Tags: Amazon, Affiliate, Associates, Amazon Associates, Amazon Associate, Product Advertising API, Amazon API, Amazon Link, Amazon Ad, Amazon Affiliate, eCommerce
4
  Requires at least: 3.0.1
5
  Tested up to: 4.8.0
6
- Stable tag: 1.4.6
7
  License: GPLv2
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -100,6 +100,12 @@ Amazon Product Advertising API credentials are not required to use the feature t
100
 
101
  == Changelog ==
102
 
 
 
 
 
 
 
103
  = 1.4.6 - June 21, 2017 =
104
  * Fix: Amazon logo appears too big in some editors.
105
  * Fix: Plugin doesn't work in some editors.
@@ -165,6 +171,9 @@ Amazon Product Advertising API credentials are not required to use the feature t
165
 
166
  == Upgrade Notice ==
167
 
 
 
 
168
  = 1.4.6 =
169
  Fix for the issue of big Amazon logo and plugin unusable in some editors.
170
 
3
  Tags: Amazon, Affiliate, Associates, Amazon Associates, Amazon Associate, Product Advertising API, Amazon API, Amazon Link, Amazon Ad, Amazon Affiliate, eCommerce
4
  Requires at least: 3.0.1
5
  Tested up to: 4.8.0
6
+ Stable tag: 1.4.7
7
  License: GPLv2
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
100
 
101
  == Changelog ==
102
 
103
+ = 1.4.7 - July 27, 2017 =
104
+ * Fix: `Warning: DOMDocument::loadHTML(): Empty string supplied as input.`
105
+ * Fix: Ad would not be rendered even if one ASIN has expired for any multi-ASIN shortcode.
106
+ * Fix: Trailing and leading spaces in ProductLink & PriceLink Templates. This fix applies to the default templates only, and you may have to re-create any custom template based off the ProductLink and PriceLink templates to benefit from this change.
107
+ * Fix: No Timeout for Product Search.
108
+
109
  = 1.4.6 - June 21, 2017 =
110
  * Fix: Amazon logo appears too big in some editors.
111
  * Fix: Plugin doesn't work in some editors.
171
 
172
  == Upgrade Notice ==
173
 
174
+ = 1.4.7 =
175
+ Fix for the issue of trailing spaces in a few deafult templates, failed rendering due to expired ASIN and other minor bug fixes.
176
+
177
  = 1.4.6 =
178
  Fix for the issue of big Amazon logo and plugin unusable in some editors.
179
 
template/PriceLink.mustache CHANGED
@@ -1,7 +1 @@
1
- {{#Items}}
2
- {{#Item}}
3
- {{#aalb}}
4
- <a href="{{DetailPageURL}}" target="_blank" rel="nofollow">{{CurrentPrice}}</a> <!--Individual attributes are provided as variable tags as {{[[attribute]]}}. Check documentation for list of supported variable tags.-->
5
- {{/aalb}}
6
- {{/Item}}
7
- {{/Items}}
1
+ {{#Items}}{{#Item}}{{#aalb}}<a href="{{DetailPageURL}}" target="_blank" rel="nofollow">{{CurrentPrice}}</a>{{/aalb}}{{/Item}}{{/Items}}
 
 
 
 
 
 
template/ProductLink.mustache CHANGED
@@ -1,7 +1 @@
1
- {{#Items}}
2
- {{#Item}}
3
- {{#aalb}}
4
- <a href="{{DetailPageURL}}" target="_blank" rel="nofollow">[[Amazon_Link_Text]]</a> <!--Individual attributes are provided as variable tags as {{[[attribute]]}}. Check documentation for list of supported variable tags.-->
5
- {{/aalb}}
6
- {{/Item}}
7
- {{/Items}}
1
+ {{#Items}}{{#Item}}{{#aalb}}<a href="{{DetailPageURL}}" target="_blank" rel="nofollow">[[Amazon_Link_Text]]</a>{{/aalb}}{{/Item}}{{/Items}}