abstract class CartBlockBase in Commerce Cart Blocks 8
CartBlockBase class.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Core\Block\BlockBase implements BlockPluginInterface, PluginWithFormsInterface, PreviewFallbackInterface uses BlockPluginTrait, ContextAwarePluginAssignmentTrait
- class \Drupal\commerce_cart_blocks\Plugin\Block\CartBlockBase implements ContainerFactoryPluginInterface
- class \Drupal\Core\Block\BlockBase implements BlockPluginInterface, PluginWithFormsInterface, PreviewFallbackInterface uses BlockPluginTrait, ContextAwarePluginAssignmentTrait
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
Expanded class hierarchy of CartBlockBase
File
- src/
Plugin/ Block/ CartBlockBase.php, line 19
Namespace
Drupal\commerce_cart_blocks\Plugin\BlockView source
abstract class CartBlockBase extends BlockBase implements ContainerFactoryPluginInterface {
/**
* The cart provider.
*
* @var \Drupal\commerce_cart\CartProviderInterface
*/
protected $cartProvider;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* Constructs a new CartBlock.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin ID for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\commerce_cart\CartProviderInterface $cart_provider
* The cart provider.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, CartProviderInterface $cart_provider, EntityTypeManagerInterface $entity_type_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->cartProvider = $cart_provider;
$this->entityTypeManager = $entity_type_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('commerce_cart.cart_provider'), $container
->get('entity_type.manager'));
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'hide_if_empty' => FALSE,
'display_links' => [
'cart' => 'cart',
],
'cart_link_text' => 'Cart',
'checkout_link_text' => 'Checkout',
'count_text_singular' => '@count item',
'count_text_plural' => '@count items',
'count_text_empty' => '',
];
}
/**
* {@inheritdoc}
*/
public function blockForm($form, FormStateInterface $form_state) {
$form['hide_if_empty'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Hide if empty'),
'#description' => $this
->t('When checked, then the block will be hidden if the cart is empty.'),
'#default_value' => $this->configuration['hide_if_empty'],
];
$form['display_links'] = [
'#type' => 'checkboxes',
'#title' => $this
->t('Display links'),
'#description' => $this
->t('Choose which links to display within the block content.'),
'#options' => [
'cart' => $this
->t('Cart'),
'checkout' => $this
->t('Checkout'),
],
'#default_value' => $this->configuration['display_links'],
];
$form['cart_link_text'] = [
'#type' => 'textfield',
'#title' => $this
->t('Cart link text'),
'#description' => $this
->t('Enter the text for the Cart link, if shown.'),
'#default_value' => $this->configuration['cart_link_text'],
];
$form['checkout_link_text'] = [
'#type' => 'textfield',
'#title' => $this
->t('Checkout link text'),
'#description' => $this
->t('Enter the text for the Checkout link, if shown.'),
'#default_value' => $this->configuration['checkout_link_text'],
];
$form['count_text_plural'] = [
'#type' => 'textfield',
'#title' => $this
->t('Count text (plural)'),
'#description' => $this
->t('The text to use when describing the number of cart items, including the @count placeholder.'),
'#default_value' => $this->configuration['count_text_plural'],
];
$form['count_text_singular'] = [
'#type' => 'textfield',
'#title' => $this
->t('Count text (singular)'),
'#description' => $this
->t('The text to use when describing a single cart item, including the @count placeholder.'),
'#default_value' => $this->configuration['count_text_singular'],
];
$form['count_text_empty'] = [
'#type' => 'textfield',
'#title' => $this
->t('Count text (empty)'),
'#description' => $this
->t('The text to use when describing an empty cart item, including the @count placeholder.'),
'#default_value' => $this->configuration['count_text_empty'],
];
return $form;
}
/**
* {@inheritdoc}
*/
public function blockSubmit($form, FormStateInterface $form_state) {
$this
->setConfigurationValue('hide_if_empty', $form_state
->getValue('hide_if_empty'));
$this
->setConfigurationValue('display_links', $form_state
->getValue('display_links'));
$this
->setConfigurationValue('cart_link_text', $form_state
->getValue('cart_link_text'));
$this
->setConfigurationValue('checkout_link_text', $form_state
->getValue('checkout_link_text'));
$this
->setConfigurationValue('count_text_plural', $form_state
->getValue('count_text_plural'));
$this
->setConfigurationValue('count_text_singular', $form_state
->getValue('count_text_singular'));
$this
->setConfigurationValue('count_text_empty', $form_state
->getValue('count_text_empty'));
}
/**
* {@inheritdoc}
*/
protected function buildCache() {
$cacheableMetadata = $this
->getCacheabilityMetadata();
return [
'contexts' => $cacheableMetadata
->getCacheContexts(),
'tags' => $cacheableMetadata
->getCacheTags(),
'max-age' => $cacheableMetadata
->getCacheMaxAge(),
];
}
/**
* {@inheritdoc}
*/
protected function isInCart() {
return \Drupal::routeMatch()
->getRouteName() === 'commerce_cart.page';
}
/**
* {@inheritdoc}
*/
protected function buildLinks() {
$links = [];
$displayLinks = $this->configuration['display_links'];
if ($displayLinks['checkout']) {
$carts = $this
->getCarts();
if (!empty($carts)) {
/** @var \Drupal\commerce_order\Entity\OrderInterface $cart */
$cart = array_shift($carts);
$links[] = [
'#type' => 'link',
'#title' => $this->configuration['checkout_link_text'],
'#url' => Url::fromRoute('commerce_checkout.form', [
'commerce_order' => $cart
->id(),
]),
];
}
}
if ($displayLinks['cart']) {
$links[] = [
'#type' => 'link',
'#title' => $this->configuration['cart_link_text'],
'#url' => Url::fromRoute('commerce_cart.page'),
];
}
return $links;
}
/**
* Gets the text representation of the count of items.
*/
protected function getCountText() {
if (!$this
->getCartCount()) {
return $this->configuration['count_text_empty'];
}
return $this
->formatPlural($this
->getCartCount(), $this->configuration['count_text_singular'], $this->configuration['count_text_plural']);
}
/**
* Gets the total price of the carts.
*/
protected function getTotal() {
$carts = $this
->getCarts();
/** @var \Drupal\commerce_order\Entity\OrderInterface $firstCart */
$firstCart = array_shift($carts);
if (!empty($firstCart)) {
$price = $firstCart
->getTotalPrice();
foreach ($carts as $cart_id => $cart) {
$price
->add($cart
->getTotalPrice());
}
}
else {
$price = $this
->createPrice(0);
}
return $price;
}
/**
*
*/
protected function createPrice($amount) {
/** @var \Drupal\commerce_store\StoreStorageInterface $storage */
$storage = $this->entityTypeManager
->getStorage('commerce_store');
$defaultStore = $storage
->loadDefault();
$currencyCode = $defaultStore ? $defaultStore
->getDefaultCurrencyCode() : 'USD';
return new Price($amount, $currencyCode);
}
/**
* Gets the total price as a formatted string.
*
* @return mixed|null
*/
protected function getTotalText() {
$element = [];
$element['price'] = [
'#type' => 'inline_template',
'#template' => '{{ price|commerce_price_format }}',
'#context' => [
'price' => $this
->getTotal(),
],
];
return \Drupal::service('renderer')
->renderPlain($element);
}
/**
* {@inheritdoc}
*/
protected function getLibraries() {
return [];
}
/**
* {@inheritdoc}
*/
protected function getCacheabilityMetadata() {
$carts = $this
->getCarts();
$cacheableMetadata = new CacheableMetadata();
$cacheableMetadata
->addCacheContexts([
'user',
'session',
]);
foreach ($carts as $cart) {
$cacheableMetadata
->addCacheableDependency($cart);
}
return $cacheableMetadata;
}
/**
* {@inheritdoc}
*/
protected function getCartCount() {
$carts = $this
->getCarts();
$count = 0;
foreach ($carts as $cart_id => $cart) {
foreach ($cart
->getItems() as $order_item) {
$count += (int) $order_item
->getQuantity();
}
}
return $count;
}
/**
* {@inheritdoc}
*/
protected function getCarts() {
/** @var \Drupal\commerce_order\Entity\OrderInterface[] $carts */
$carts = $this->cartProvider
->getCarts();
return array_filter($carts, function ($cart) {
/** @var \Drupal\commerce_order\Entity\OrderInterface $cart */
return $cart
->hasItems() && $cart->cart->value;
});
}
/**
* {@inheritdoc}
*/
protected function shouldHide() {
return $this->configuration['hide_if_empty'] && !$this
->getCartCount();
}
/**
* Gets the cart views for each cart.
*
* @return array
* An array of view ids keyed by cart order ID.
*/
protected function getCartViews() {
$carts = $this
->getCarts();
$availableViews = $this
->getAvailableViews($carts);
$cartViews = [];
foreach ($carts as $cartId => $cart) {
$cartViews[] = [
'#prefix' => '<div class="cart cart-block">',
'#suffix' => '</div>',
'#type' => 'view',
'#name' => $availableViews[$cartId],
'#arguments' => [
$cartId,
],
'#embed' => TRUE,
];
}
return $cartViews;
}
/**
* {@inheritdoc}
*/
private function getOrderTypeIds(array $carts) {
return array_map(function ($cart) {
return $cart
->bundle();
}, $carts);
}
/**
* {@inheritdoc}
*/
private function getAvailableViews(array $carts) {
try {
$orderTypeIds = $this
->getOrderTypeIds($carts);
$orderTypeStorage = $this->entityTypeManager
->getStorage('commerce_order_type');
$orderTypes = $orderTypeStorage
->loadMultiple(array_unique($orderTypeIds));
$availableViews = [];
foreach ($orderTypeIds as $cartId => $order_type_id) {
/** @var \Drupal\commerce_order\Entity\OrderTypeInterface $order_type */
$order_type = $orderTypes[$order_type_id];
$availableViews[$cartId] = $order_type
->getThirdPartySetting('commerce_cart', 'cart_block_view', 'commerce_cart_block');
}
return $availableViews;
} catch (InvalidPluginDefinitionException $e) {
return [];
}
}
/**
* {@inheritdoc}
*
* @todo Find proper cache tags to make this cacheable
*/
public function getCacheMaxAge() {
return 0;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BlockPluginInterface:: |
constant | Indicates the block label (title) should be displayed to end users. | ||
BlockPluginInterface:: |
public | function | Builds and returns the renderable array for this block plugin. | 47 |
BlockPluginTrait:: |
protected | property | The transliteration service. | |
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
protected | function | Returns generic default configuration for block plugins. | |
BlockPluginTrait:: |
protected | function | Indicates whether the block should be shown. | 16 |
BlockPluginTrait:: |
public | function | 3 | |
BlockPluginTrait:: |
public | function | Creates a generic configuration form for all block types. Individual block plugins can add elements to this form by overriding BlockBase::blockForm(). Most block plugins should not override this method unless they need to alter the generic form elements. | 2 |
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | 1 | |
BlockPluginTrait:: |
public | function | 1 | |
BlockPluginTrait:: |
public | function | 3 | |
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | Sets the transliteration service. | |
BlockPluginTrait:: |
public | function | Most block plugins should not override this method. To add submission handling for a specific block type, override BlockBase::blockSubmit(). | |
BlockPluginTrait:: |
protected | function | Wraps the transliteration service. | |
BlockPluginTrait:: |
public | function | Most block plugins should not override this method. To add validation for a specific block type, override BlockBase::blockValidate(). | 1 |
CartBlockBase:: |
protected | property | The cart provider. | |
CartBlockBase:: |
protected | property | The entity type manager. | |
CartBlockBase:: |
public | function |
Overrides BlockPluginTrait:: |
1 |
CartBlockBase:: |
public | function |
Overrides BlockPluginTrait:: |
1 |
CartBlockBase:: |
protected | function | ||
CartBlockBase:: |
protected | function | ||
CartBlockBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
CartBlockBase:: |
protected | function | ||
CartBlockBase:: |
public | function |
Overrides BlockPluginTrait:: |
1 |
CartBlockBase:: |
private | function | ||
CartBlockBase:: |
protected | function | ||
CartBlockBase:: |
public | function |
@todo Find proper cache tags to make this cacheable Overrides ContextAwarePluginBase:: |
|
CartBlockBase:: |
protected | function | ||
CartBlockBase:: |
protected | function | ||
CartBlockBase:: |
protected | function | Gets the cart views for each cart. | 1 |
CartBlockBase:: |
protected | function | Gets the text representation of the count of items. | |
CartBlockBase:: |
protected | function | 1 | |
CartBlockBase:: |
private | function | ||
CartBlockBase:: |
protected | function | Gets the total price of the carts. | |
CartBlockBase:: |
protected | function | Gets the total price as a formatted string. | |
CartBlockBase:: |
protected | function | ||
CartBlockBase:: |
protected | function | ||
CartBlockBase:: |
public | function |
Constructs a new CartBlock. Overrides BlockPluginTrait:: |
|
ContextAwarePluginAssignmentTrait:: |
protected | function | Builds a form element for assigning a context to a given slot. | |
ContextAwarePluginAssignmentTrait:: |
protected | function | Wraps the context handler. | |
ContextAwarePluginBase:: |
protected | property | The data objects representing the context of this plugin. | |
ContextAwarePluginBase:: |
private | property | Data objects representing the contexts passed in the plugin configuration. | |
ContextAwarePluginBase:: |
protected | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyInterface:: |
9 |
ContextAwarePluginBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
4 |
ContextAwarePluginBase:: |
public | function |
This code is identical to the Component in order to pick up a different
Context class. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Gets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the value for a defined context. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the values for all defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Set a context on this plugin. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Sets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Sets the value for a defined context. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Validates the set values for the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function | Implements magic __get() method. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginWithFormsTrait:: |
public | function | ||
PluginWithFormsTrait:: |
public | function | ||
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TypedDataTrait:: |
protected | property | The typed data manager used for creating the data types. | |
TypedDataTrait:: |
public | function | Gets the typed data manager. | 2 |
TypedDataTrait:: |
public | function | Sets the typed data manager. | 2 |