public function FilterAmazon::process in Amazon Product Advertisement API 8.2
Performs the filter processing.
Parameters
string $text: The text string to be filtered.
string $langcode: The language code of the text to be filtered.
Return value
\Drupal\filter\FilterProcessResult The filtered text, wrapped in a FilterProcessResult object, and possibly with associated assets, cacheability metadata and placeholders.
Overrides FilterInterface::process
See also
\Drupal\filter\FilterProcessResult
File
- modules/
amazon_filter/ src/ Plugin/ Filter/ FilterAmazon.php, line 53 - Contains \Drupal\amazon_filter\Plugin\Filter\FilterAmazon.
Class
- FilterAmazon
- Provides a filter to easily be links to Amazon using an Associate ID.
Namespace
Drupal\amazon_filter\Plugin\FilterCode
public function process($text, $langcode) {
$matches = [];
$replacements = [];
if (preg_match_all('`\\[amazon(.*?)\\]`', $text, $matches)) {
/** @var \Drupal\Core\Render $renderer */
$renderer = \Drupal::service('renderer');
foreach ($matches[1] as $index => $match) {
$completeToken = $matches[0][$index];
if (isset($replacements[$completeToken])) {
// We've already built this replacement, do not do it again.
continue;
}
// Preferred format.
$params = explode(':', trim($match));
if (count($params) == 1) {
// Backwards-compatible format.
$params = explode(' ', trim($match));
}
if (count($params) == 1) {
continue;
}
$asin = $params[0];
$type = $params[1];
$maxAge = $this->defaultMaxAge;
if (!empty($params[2])) {
$maxAge = $params[2];
}
// @TODO: quick fix to get this working. Needs to be injected!
$associatesId = \Drupal::config('amazon.settings')
->get('associates_id');
$amazon = new Amazon($associatesId);
$results = $amazon
->lookup($asin);
if (empty($results[0])) {
continue;
}
// Build a render array for this element. This allows us to easily
// override the layout by simply overriding the Twig template. It also
// lets us set custom caching for each filter link.
$build = [
'#results' => $results,
'#max_age' => $maxAge,
];
// Use the correct Twig template based on the "type" specified.
switch (strtolower($type)) {
case 'inline':
$build['#theme'] = 'amazon_inline';
break;
case 'small':
case 'thumbnail':
$build['#theme'] = 'amazon_image';
$build['#size'] = 'small';
break;
case 'medium':
$build['#theme'] = 'amazon_image';
$build['#size'] = 'medium';
break;
case 'large':
case 'full':
$build['#theme'] = 'amazon_image';
$build['#size'] = 'large';
break;
default:
continue;
}
$replacements[$completeToken] = $renderer
->render($build);
}
}
$text = strtr($text, $replacements);
return new FilterProcessResult($text);
}