-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdynamic_block.module
134 lines (123 loc) · 3.94 KB
/
dynamic_block.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
/**
* Implements hook_menu().
*/
function dynamic_block_menu() {
$items['admin/structure/block/dynamic_block'] = array(
'title' => 'Setting dynamic block',
'page callback' => 'drupal_get_form',
'page arguments' => array('dynamic_block_setting_form'),
'access arguments' => array('administer site configuration'),
'file' => 'dynamic_block.form.inc',
);
$items['admin/structure/block/dynamic_block/%/change'] = array(
'title' => 'Change setting dynamic block',
'page callback' => 'drupal_get_form',
'page arguments' => array('dynamic_block_change_setting_form', 4),
'access arguments' => array('administer site configuration'),
'file' => 'dynamic_block.form.inc',
);
return $items;
}
/**
* Implements hook_block_info().
*/
function dynamic_block_block_info() {
$blocks['dynamic-block-header'] = array(
'info' => t('dynamick block (header)'),
);
$blocks['dynamic-block-footer'] = array(
'info' => t('dynamick block (footer)'),
);
return $blocks;
}
/**
* Implements hook_block_view().
*/
function dynamic_block_block_view($delta = '') {
$block = array();
if ($delta == 'dynamic-block-header') {
$block['subject'] = t('Title dynamic block header');
$block['content'] = t('Hi selected setting denamic block!');
}
if ($delta == 'dynamic-block-footer') {
$block['subject'] = t('Title dynamic block footer');
$block['content'] = t('Hi selected setting denamic block!');
}
return $block;
}
/**
* get all blocks
* dynamic_block_get_all_blocks.
*
* @return array
*/
function dynamic_block_get_all_blocks() {
$vars = array('none' => t('Not selected'));
module_load_include('inc', 'block', 'block.admin');
global $theme_key;
$blocks = block_admin_display_prepare_blocks($theme_key);
if ($blocks) {
foreach ($blocks as $block) {
$vars[$block['module'] . '-' . $block['delta']] = $block['info'] . ' | ' . $block['module'] . ' - ' . $block['delta'];
}
}
return $vars;
}
/**
* get settings vars
* dynamic_block_get_settings_vars.
*
* @return array
*/
function dynamic_block_get_settings_vars() {
$vars = variable_get('dynamic_block_setting_vars', array());
$options = array();
foreach ($vars as $key => $var) {
$options[$key] = array(
'url' => $var['url'],
'body' => dynamic_block_get_render_body($var),
'actions' => '<a href="' . $GLOBALS['base_url'] . '/admin/structure/block/dynamic_block/' . $key . '/change">Изменить</a>',
);
}
return $options;
}
/**
* get body text for table
*
* @param $var
*
* @return string
*/
function dynamic_block_get_render_body($var) {
$output = '<div id="body_header"><label for="body_header">Dynamic block header</label>' . substr(strip_tags($var['body_header']['value']), 0, 20) . '</div>'
. '<div id="body_header"><label for="body_header">Dynamic block footer</label>' . substr(strip_tags($var['body_footer']['value']), 0, 20) . '</div>';
return $output;
}
/**
* Implements hook_block_view_alter()
*/
function dynamic_block_block_view_alter(&$data, $block) {
if ($block->module == 'dynamic_block') {
$data['content'] = '';
$current_path = current_path();
$options = variable_get('dynamic_block_setting_vars', array());
if (!empty($options)) {
foreach ($options as $option) {
$urls = explode(', ', $option['url']);
foreach ($urls as $url) {
$page = (isset($_GET['page'])) ? $_GET['page'] : 0;
if ($url == $current_path && $page < 1) {
if ($block->delta == 'dynamic-block-header') {
$body = check_markup($option['body_header']['value'], $option['body_header']['format']);
}
elseif ($block->delta == 'dynamic-block-footer') {
$body = check_markup($option['body_footer']['value'], $option['body_footer']['format']);
}
$data['content'] = render($body);
}
}
}
}
}
}