class Dynamic_Banner_Block in Dynamic Banner 8
Provides a 'Hello' Block.
Plugin annotation
@Block(
id = "Dynamic Banner",
admin_label = @Translation("Dynamic Banner"),
category = @Translation("Dynamic Banner"),
)
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\dynamic_banner\Plugin\Block\Dynamic_Banner_Block
- 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 Dynamic_Banner_Block
File
- src/
Plugin/ Block/ Dynamic_Banner_Block.php, line 19
Namespace
Drupal\dynamic_banner\Plugin\BlockView source
class Dynamic_Banner_Block extends BlockBase {
public function build() {
// store the path of the page the block is loading from, this will sead our first searches
//$path = drupal_strtolower(drupal_get_path_alias($_GET['q']));
$current_path = \Drupal::service('path.current')
->getPath();
$path = \Drupal::service('path_alias.manager')
->getAliasByPath($current_path);
$path = trim($path, '/');
do {
$result = NULL;
// TODO: Drupal Rector Notice: Please delete the following comment after you've made any necessary changes.
// You will need to use `\Drupal\core\Database\Database::getConnection()` if you do not yet have access to the container here.
$query = \Drupal::database()
->select('dynamic_banner', 'd');
$query
->condition('d.path', $path, '=')
->fields('d');
$result = $query
->execute()
->fetchObject();
// search for that path string exact match
if ($result) {
// have to translate if we have fids
// image should always be in path format (sites/default/banners/pic0.jpg,sites/default/banners/pic1.jpg)
if (!empty($result->imgurl) || !empty($result->imgfid)) {
$image = $this
->dynamic_banner_image_handler($result->imgurl, $result->imgfid);
}
else {
$image = "";
}
$bannerarr = array(
'url' => $image,
'text' => $result->text,
'link' => $result->link,
'display_setting' => \Drupal::config('dynamic_banner.settings')
->get('dynamic_banner_display_setting', BANNER_DEFAULT_OUTPUT),
'display_errors' => \Drupal::config('dynamic_banner.settings')
->get('dynamic_banner_display_errors', BANNER_DEFAULT_ERROR),
);
// return array('content' => theme('banner_output', $bannerarr));
return [
'#theme' => 'banner_output',
'#bannerarr' => $bannerarr,
];
}
// wild section //
$result = NULL;
$wild_search = $path . '*';
// create and execute query
// TODO: Drupal Rector Notice: Please delete the following comment after you've made any necessary changes.
// You will need to use `\Drupal\core\Database\Database::getConnection()` if you do not yet have access to the container here.
$query = \Drupal::database()
->select('dynamic_banner', 'd');
$query
->condition('d.path', $wild_search, '=')
->fields('d');
$result = $query
->execute()
->fetchObject();
// search for the wild card string exact match
if ($result) {
// have to translate if we have fids
// image should always be in path format (sites/default/banners/pic0.jpg,sites/default/banners/pic1.jpg)
if (!empty($result->imgurl) || !empty($result->imgfid)) {
$image = $this
->dynamic_banner_image_handler($result->imgurl, $result->imgfid);
}
else {
$image = "";
}
$bannerarr = array(
'url' => $image,
'text' => $result->text,
'link' => $result->link,
'display_setting' => \Drupal::config('dynamic_banner.settings')
->get('dynamic_banner_display_setting', BANNER_DEFAULT_OUTPUT),
'display_errors' => \Drupal::config('dynamic_banner.settings')
->get('dynamic_banner_display_errors', BANNER_DEFAULT_ERROR),
);
// return array('content' => theme('banner_output', $bannerarr));
return [
'#theme' => 'banner_output',
'#bannerarr' => $bannerarr,
];
}
// random section //
$result = NULL;
$random_search = $path . '!';
// create and execute query
// TODO: Drupal Rector Notice: Please delete the following comment after you've made any necessary changes.
// You will need to use `\Drupal\core\Database\Database::getConnection()` if you do not yet have access to the container here.
$query = \Drupal::database()
->select('dynamic_banner', 'd');
$query
->condition('d.path', $random_search, '=')
->fields('d');
$result = $query
->execute()
->fetchObject();
// search for that random string exact match
if ($result) {
// get extra stuff associated with randoms
if (!empty($result->imgurl) || !empty($result->imgfid)) {
$images = $this
->dynamic_banner_image_handler($result->imgurl, $result->imgfid);
}
else {
$images = "";
}
// support for random text if needed
$texts = $result->text;
// explode comma seperated images and text
$image = explode(",", $images);
// support for random text if needed
$text = explode(",", $texts);
// count how many there are
$count = count($image);
// handle the random with ints (deal with array start at 0 problems)
// so if there are 3 elements in the array it is 0-2 not 1-3 so generate random based on that
$random = $count - rand(0, $count - 1) - 1;
// remember text is optional
$bannerarr = array(
'url' => $image[$random],
'text' => $text[$random],
'link' => $result->link,
'display_setting' => \Drupal::config('dynamic_banner.settings')
->get('dynamic_banner_display_setting', BANNER_DEFAULT_OUTPUT),
'display_errors' => \Drupal::config('dynamic_banner.settings')
->get('dynamic_banner_display_errors', BANNER_DEFAULT_ERROR),
);
// return array('content' => theme('banner_output', $bannerarr));
return [
'#theme' => 'banner_output',
'#bannerarr' => $bannerarr,
];
}
// chop off more of the string and try again, it is key to not modify the path before this point
$last_slash_position = strrpos($path, "/");
// returns false if not found
if ($last_slash_position !== FALSE) {
//$path = drupal_substr($path, 0, $last_slash_position); drupal_substr is undefineed
$path = mb_substr($path, 0, $last_slash_position);
}
else {
$path = FALSE;
}
} while ($path != FALSE);
// loop until we find the top down hirarchy
// well no banner was found for this specific page if we have a default banner then display it
///////////////////////////// this will soon be stored in the variables table ////////////////// TODO
// create and execute query
// TODO: Drupal Rector Notice: Please delete the following comment after you've made any necessary changes.
// You will need to use `\Drupal\core\Database\Database::getConnection()` if you do not yet have access to the container here.
$query = \Drupal::database()
->select('dynamic_banner', 'd');
$query
->condition('d.path', 'DEFAULT', '=')
->fields('d');
$result = $query
->execute()
->fetchObject();
// for the resultant row (SHOULD ALWAYS BE ONE)
if ($result) {
if (!empty($result->imgurl) && !empty($result->imgfid)) {
$image = $this
->dynamic_banner_image_handler($result->imgurl, $result->imgfid);
}
else {
$image = "";
}
$bannerarr = array(
'url' => $image,
'text' => $result->text,
'link' => $result->link,
'display_setting' => \Drupal::config('dynamic_banner.settings')
->get('dynamic_banner_display_setting', BANNER_DEFAULT_OUTPUT),
'display_errors' => \Drupal::config('dynamic_banner.settings')
->get('dynamic_banner_display_errors', BANNER_DEFAULT_ERROR),
);
//return array('content' => theme('banner_output', $bannerarr));
return [
'#theme' => 'banner_output',
'#bannerarr' => $bannerarr,
];
}
// just encase something went wrong
// return array('#markup' => 'Hello World');
}
/**
* This function will load imgurl if there is no url for img
* then it will load the fids into path format
*
* Input 1: The imgurl(s) that we are loading [maybe csv]
* Input 2: The imgfid(s) that we are loading [maybe csv]
*/
public function dynamic_banner_image_handler($imgurl, $imgfid) {
// we have found the imgurl already in the right format return it
if ($imgurl && $imgurl != '') {
return $imgurl;
}
else {
if (strrpos($imgfid, ',')) {
// split the plain string into an array
$all_fids = explode(",", $imgfid);
// load all files at once
//$all_files = file_load_multiple($all_fids);
$all_files = \Drupal\file\Entity\File::loadMultiple($all_fids);
$retval = "";
// default the return string
// go into all the loaded files
foreach ($all_files as $file) {
// if this is the first time through do not add a comma to the string
if ($retval != "") {
$retval .= ",";
}
// have to translate the public string in the uri back into something browsers understand
if (isset($file)) {
$fileUrl = file_create_url($file
->getFileUri());
}
else {
$fileUrl = '';
}
//$retval .= str_replace('public://', file_public_path() . '/', $fileUrl);
$retval .= str_replace('public://', '/', $fileUrl);
}
return $retval;
}
else {
$file = \Drupal::service('entity_type.manager')
->getStorage('file')
->load((int) $imgfid);
// have to translate the public string in the uri back into something browsers understand
if (isset($file)) {
$fileUrl = file_create_url($file
->getFileUri());
}
else {
$fileUrl = '';
}
$file_path = str_replace('public://', '/', $fileUrl);
return $file_path;
}
}
}
//disable caching in this block
public function getCacheMaxAge() {
return 0;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BlockPluginInterface:: |
constant | Indicates the block label (title) should be displayed to end users. | ||
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 | 16 | |
BlockPluginTrait:: |
public | function | 13 | |
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 | 19 | |
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 |
BlockPluginTrait:: |
public | function | 22 | |
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 | |
Dynamic_Banner_Block:: |
public | function |
Builds and returns the renderable array for this block plugin. Overrides BlockPluginInterface:: |
|
Dynamic_Banner_Block:: |
public | function | This function will load imgurl if there is no url for img then it will load the fids into path format | |
Dynamic_Banner_Block:: |
public | function |
The maximum age for which this object may be cached. Overrides ContextAwarePluginBase:: |
|
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 |