public function Dynamic_Banner_Block::build in Dynamic Banner 8
Builds and returns the renderable array for this block plugin.
If a block should not be rendered because it has no content, then this method must also ensure to return no content: it must then only return an empty array, or an empty array with #cache set (with cacheability metadata indicating the circumstances for it being empty).
Return value
array A renderable array representing the content of the block.
Overrides BlockPluginInterface::build
See also
\Drupal\block\BlockViewBuilder
File
- src/
Plugin/ Block/ Dynamic_Banner_Block.php, line 20
Class
- Dynamic_Banner_Block
- Provides a 'Hello' Block.
Namespace
Drupal\dynamic_banner\Plugin\BlockCode
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');
}