├── LICENSE.md
├── README.md
├── composer.json
├── elements.detail
├── .description.php
├── .parameters.php
├── class.php
├── lang
│ └── ru
│ │ ├── .description.php
│ │ └── .parameters.php
└── templates
│ └── .default
│ └── template.php
├── elements.list
├── .description.php
├── .parameters.php
├── class.php
├── lang
│ └── ru
│ │ ├── .description.php
│ │ └── .parameters.php
└── templates
│ └── .default
│ └── template.php
└── elements
├── .description.php
├── .parameters.php
├── class.php
├── lang
└── ru
│ ├── .description.php
│ └── .parameters.php
└── templates
└── .default
├── detail.php
├── index.php
├── search.php
└── section.php
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright © 2014-2015 Nik Samokhvalov (http://samokhvalov.info)
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included
12 | in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Базовые битриксовые компоненты
2 |
3 | Сборка базовых битриксовых компонетов (ББК) ускоряет разработку, предоставляя, при этом, дополнительные, не присущие
4 | ни одному штатному компоненту «1С-Битрикса», возможности.
5 |
6 | Используя ББК, вы сконцентрируетесь на основной логике компонента. Проверку и привидение параметров, установку
7 | заголовков, тегов, постраничной навигации, обработку аякс-запросов, перехват ошибок — обо всём этом и многом другом
8 | позаботится ББК.
9 |
10 | ## Требования
11 |
12 | * PHP >= 5.4.0
13 | * Bitrix CMS >= 15.0.2
14 |
15 | ## Зависимости
16 |
17 | Данный репозиторий содержит в себе примеры компонентов. Бизнес-логика же ББК реализована в модуле
18 | [bex.bbc](https://github.com/bitrix-expert/bbc-module), который автоматически установится в качестве зависимости
19 | «Композера».
20 |
21 | ## [Документация](http://bbc.samokhvalov.info)
22 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bitrix-expert/bbc",
3 | "description": "Bitrix basis components",
4 | "keywords": ["bitrix", "components"],
5 | "homepage": "http://bbc.bitrix.expert",
6 | "type": "bitrix-component",
7 | "license": "MIT",
8 | "support": {
9 | "email": "nik@samokhvalov.info",
10 | "skype": "nik.samokhvalov",
11 | "issues": "https://github.com/bitrix-expert/bbc/issues",
12 | "source": "https://github.com/bitrix-expert/bbc/"
13 | },
14 | "authors": [
15 | {
16 | "name": "Nik Samokhvalov",
17 | "homepage": "http://samokhvalov.info",
18 | "email": "nik@samokhvalov.info"
19 | }
20 | ],
21 | "require": {
22 | "php":">=5.4.0",
23 | "composer/installers": "~1",
24 | "bitrix-expert/bbc-module": "1.*"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/elements.detail/.description.php:
--------------------------------------------------------------------------------
1 | Loc::getMessage('ELEMENTS_DETAIL_NAME'),
11 | 'DESCRIPTION' => Loc::getMessage('ELEMENTS_DETAIL_DESCRIPTION'),
12 | 'SORT' => 30,
13 | 'PATH' => array(
14 | 'ID' => 'basis',
15 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_GROUP'),
16 | 'SORT' => 10,
17 | 'CHILD' => array(
18 | 'ID' => 'elements',
19 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_CHILD_GROUP'),
20 | 'SORT' => 10
21 | )
22 | )
23 | );
--------------------------------------------------------------------------------
/elements.detail/.parameters.php:
--------------------------------------------------------------------------------
1 | '']);
18 | $iblocks = [];
19 | $elementProperties = [];
20 |
21 | $ogTagsFields = [
22 | 'TITLE' => [
23 | 0 => '',
24 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_ELEMENT_NAME'),
25 | 'SEO_TITLE' => Loc::getMessage('ELEMENTS_DETAIL_PAGE_TITLE')
26 | ],
27 | 'DESCRIPTION' => [
28 | 0 => '',
29 | 'PREVIEW_TEXT' => Loc::getMessage('ELEMENTS_DETAIL_PREVIEW_TEXT'),
30 | 'DETAIL_TEXT' => Loc::getMessage('ELEMENTS_DETAIL_DETAIL_TEXT'),
31 | 'SEO_DESCRIPTION' => Loc::getMessage('ELEMENTS_DETAIL_PAGE_DESCRIPTION')
32 | ],
33 | 'IMAGE' => [
34 | 0 => '',
35 | 'PREVIEW_PICTURE' => Loc::getMessage('ELEMENTS_DETAIL_PREVIEW_PICTURE'),
36 | 'DETAIL_PICTURE' => Loc::getMessage('ELEMENTS_DETAIL_DETAIIL_PICTURE')
37 | ],
38 | 'URL' => [
39 | 0 => '',
40 | 'SHORT_LINK' => Loc::getMessage('ELEMENTS_DETAIL_SHORT_LINK')
41 | ]
42 | ];
43 |
44 | if (isset($arCurrentValues['IBLOCK_TYPE']) && strlen($arCurrentValues['IBLOCK_TYPE']))
45 | {
46 | $rsIblocks = Iblock\IblockTable::getList([
47 | 'order' => [
48 | 'SORT' => 'ASC',
49 | 'NAME' => 'ASC'
50 | ],
51 | 'filter' => [
52 | 'IBLOCK_TYPE_ID' => $arCurrentValues['IBLOCK_TYPE'],
53 | 'ACTIVE' => 'Y'
54 | ],
55 | 'select' => [
56 | 'ID',
57 | 'NAME'
58 | ]
59 | ]);
60 |
61 | while ($iblock = $rsIblocks->fetch())
62 | {
63 | $iblocks[$iblock['ID']] = $iblock['NAME'];
64 | }
65 | }
66 |
67 | if (isset($arCurrentValues['IBLOCK_ID']) && strlen($arCurrentValues['IBLOCK_ID']))
68 | {
69 | $rsProperties = CIBlockProperty::GetList(
70 | [
71 | 'sort' => 'asc',
72 | 'name' => 'asc'
73 | ],
74 | [
75 | 'ACTIVE' => 'Y',
76 | 'IBLOCK_ID' => $arCurrentValues['IBLOCK_ID']
77 | ]
78 | );
79 |
80 | while ($property = $rsProperties->Fetch())
81 | {
82 | $elementProperties[$property['CODE']] = '['.$property['CODE'].'] '.$property['NAME'];
83 |
84 | if ($property['PROPERTY_TYPE'] === 'S')
85 | {
86 | $ogTagsFields['TITLE']['PROPERTY_'.$property['CODE']] = $property['NAME'];
87 | $ogTagsFields['DESCRIPTION']['PROPERTY_'.$property['CODE']] = $property['NAME'];
88 | }
89 |
90 | if ($property['PROPERTY_TYPE'] === 'F')
91 | {
92 | // $ogTagsFields['IMAGE']['PROPERTY_'.$property['CODE']] = $property['NAME']; // todo Add prepare to Elements::executePrologElements()
93 | }
94 | }
95 | }
96 |
97 | $paramElementsFields = CIBlockParameters::GetFieldCode(Loc::getMessage('ELEMENTS_DETAIL_FIELDS'), 'BASE');
98 |
99 | $arComponentParameters = [
100 | 'GROUPS' => [
101 | 'OTHERS' => [
102 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_GROUP_OTHERS')
103 | ],
104 | 'SEO' => [
105 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_GROUP_SEO')
106 | ],
107 | ],
108 | 'PARAMETERS' => [
109 | 'IBLOCK_TYPE' => [
110 | 'PARENT' => 'BASE',
111 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_IBLOCK_TYPE'),
112 | 'TYPE' => 'LIST',
113 | 'VALUES' => $iblockTypes,
114 | 'DEFAULT' => '',
115 | 'REFRESH' => 'Y'
116 | ],
117 | 'IBLOCK_ID' => [
118 | 'PARENT' => 'BASE',
119 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_IBLOCK_ID'),
120 | 'TYPE' => 'LIST',
121 | 'VALUES' => $iblocks
122 | ],
123 | 'ELEMENT_ID' => [
124 | 'PARENT' => 'BASE',
125 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_ELEMENT_ID'),
126 | 'TYPE' => 'string'
127 | ],
128 | 'ELEMENT_CODE' => [
129 | 'PARENT' => 'BASE',
130 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_ELEMENT_CODE'),
131 | 'TYPE' => 'string'
132 | ],
133 | 'SELECT_FIELDS' => $paramElementsFields,
134 | 'SELECT_PROPS' => [
135 | 'PARENT' => 'BASE',
136 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_PROPERTIES'),
137 | 'TYPE' => 'LIST',
138 | 'MULTIPLE' => 'Y',
139 | 'VALUES' => $elementProperties,
140 | 'ADDITIONAL_VALUES' => 'Y'
141 | ],
142 | 'RESULT_PROCESSING_MODE' => [
143 | 'PARENT' => 'BASE',
144 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_RESULT_PROCESSING_MODE'),
145 | 'TYPE' => 'LIST',
146 | 'VALUES' => [
147 | 'DEFAULT' => Loc::getMessage('ELEMENTS_DETAIL_RESULT_PROCESSING_MODE_DEFAULT'),
148 | 'EXTENDED' => Loc::getMessage('ELEMENTS_DETAIL_RESULT_PROCESSING_MODE_EXTENDED')
149 | ]
150 | ],
151 | 'SET_SEO_TAGS' => [
152 | 'PARENT' => 'SEO',
153 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_SET_SEO_TAGS'),
154 | 'TYPE' => 'CHECKBOX',
155 | 'DEFAULT' => 'Y'
156 | ],
157 | 'OG_TAGS_TITLE' => [
158 | 'PARENT' => 'SEO',
159 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_OG_TAGS_TITLE'),
160 | 'TYPE' => 'LIST',
161 | 'VALUES' => $ogTagsFields['TITLE']
162 | ],
163 | 'OG_TAGS_DESCRIPTION' => [
164 | 'PARENT' => 'SEO',
165 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_OG_TAGS_DESCRIPTION'),
166 | 'TYPE' => 'LIST',
167 | 'VALUES' => $ogTagsFields['DESCRIPTION']
168 | ],
169 | 'OG_TAGS_IMAGE' => [
170 | 'PARENT' => 'SEO',
171 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_OG_TAGS_IMAGE'),
172 | 'TYPE' => 'LIST',
173 | 'VALUES' => $ogTagsFields['IMAGE']
174 | ],
175 | 'OG_TAGS_URL' => [
176 | 'PARENT' => 'SEO',
177 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_OG_TAGS_URL'),
178 | 'TYPE' => 'LIST',
179 | 'VALUES' => $ogTagsFields['URL']
180 | ],
181 | 'ADD_SECTIONS_CHAIN' => [
182 | 'PARENT' => 'SEO',
183 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_ADD_SECTIONS_CHAIN'),
184 | 'TYPE' => 'CHECKBOX',
185 | 'DEFAULT' => 'Y'
186 | ],
187 | 'ADD_ELEMENT_CHAIN' => [
188 | 'PARENT' => 'SEO',
189 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_ADD_ELEMENT_CHAIN'),
190 | 'TYPE' => 'CHECKBOX',
191 | 'DEFAULT' => 'Y'
192 | ],
193 | 'SET_404' => [
194 | 'PARENT' => 'OTHERS',
195 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_SET_404'),
196 | 'TYPE' => 'CHECKBOX',
197 | 'DEFAULT' => 'N'
198 | ],
199 | 'DATE_FORMAT' => CIBlockParameters::GetDateFormat(
200 | Loc::getMessage('ELEMENTS_DETAIL_DATE_FORMAT'),
201 | 'OTHERS'
202 | ),
203 | 'CACHE_GROUPS' => [
204 | 'PARENT' => 'CACHE_SETTINGS',
205 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_CACHE_GROUPS'),
206 | 'TYPE' => 'CHECKBOX',
207 | 'DEFAULT' => 'N'
208 | ],
209 | 'CACHE_TIME' => [
210 | 'DEFAULT' => 360000
211 | ]
212 | ]
213 | ];
214 | }
215 | catch (Exception $e)
216 | {
217 | ShowError($e->getMessage());
218 | }
--------------------------------------------------------------------------------
/elements.detail/class.php:
--------------------------------------------------------------------------------
1 |
20 | */
21 | class ElementsDetail extends Bbc\Basis
22 | {
23 | use Bbc\Traits\Elements;
24 |
25 | protected $needModules = array('iblock');
26 |
27 | protected $checkParams = array(
28 | 'IBLOCK_TYPE' => array('type' => 'string'),
29 | 'IBLOCK_ID' => array('type' => 'int'),
30 | 'ELEMENT_ID' => array('type' => 'int', 'error' => false),
31 | 'ELEMENT_CODE' => array('type' => 'string', 'error' => false)
32 | );
33 |
34 | protected function executeProlog()
35 | {
36 | if (!$this->arParams['ELEMENT_ID'] && !$this->arParams['ELEMENT_CODE'])
37 | {
38 | $this->return404(true);
39 | }
40 | }
41 |
42 | protected function executeMain()
43 | {
44 | $rsElement = \CIBlockElement::GetList(
45 | array(),
46 | $this->getParamsFilters(),
47 | false,
48 | false,
49 | $this->getParamsSelected()
50 | );
51 |
52 | $processingMethod = $this->getProcessingMethod();
53 |
54 | if ($element = $rsElement->$processingMethod())
55 | {
56 | if ($arElement = $this->processingElementsResult($element))
57 | {
58 | $this->arResult = array_merge($this->arResult, $arElement);
59 | }
60 |
61 | $this->setResultCacheKeys(array(
62 | 'ID',
63 | 'IBLOCK_ID',
64 | 'CODE',
65 | 'NAME',
66 | 'IBLOCK_SECTION_ID',
67 | 'IBLOCK',
68 | 'LIST_PAGE_URL',
69 | 'SECTION_URL',
70 | 'SECTION'
71 | ));
72 | }
73 | elseif ($this->arParams['SET_404'] === 'Y')
74 | {
75 | $this->return404();
76 | }
77 | }
78 | }
--------------------------------------------------------------------------------
/elements.detail/lang/ru/.description.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
=$arResult['NAME']?>
4 |
5 | =$arResult['DETAIL_TEXT']?>
--------------------------------------------------------------------------------
/elements.list/.description.php:
--------------------------------------------------------------------------------
1 | Loc::getMessage('ELEMENTS_LIST_NAME'),
11 | 'DESCRIPTION' => Loc::getMessage('ELEMENTS_LIST_DESCRIPTION'),
12 | 'SORT' => 20,
13 | 'PATH' => array(
14 | 'ID' => 'basis',
15 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_GROUP'),
16 | 'SORT' => 10,
17 | 'CHILD' => array(
18 | 'ID' => 'elements',
19 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_CHILD_GROUP'),
20 | 'SORT' => 10
21 | )
22 | )
23 | );
--------------------------------------------------------------------------------
/elements.list/.parameters.php:
--------------------------------------------------------------------------------
1 | '']);
18 | $iblocks = [0 => ''];
19 | $sections = [0 => ''];
20 | $elementProperties = [];
21 |
22 | if (isset($arCurrentValues['IBLOCK_TYPE']) && strlen($arCurrentValues['IBLOCK_TYPE']))
23 | {
24 | $rsIblocks = Iblock\IblockTable::getList([
25 | 'order' => [
26 | 'SORT' => 'ASC',
27 | 'NAME' => 'ASC'
28 | ],
29 | 'filter' => [
30 | 'IBLOCK_TYPE_ID' => $arCurrentValues['IBLOCK_TYPE'],
31 | 'ACTIVE' => 'Y'
32 | ],
33 | 'select' => [
34 | 'ID',
35 | 'NAME'
36 | ]
37 | ]);
38 |
39 | while ($iblock = $rsIblocks->fetch())
40 | {
41 | $iblocks[$iblock['ID']] = $iblock['NAME'];
42 | }
43 | }
44 |
45 | if (isset($arCurrentValues['IBLOCK_ID']) && strlen($arCurrentValues['IBLOCK_ID']))
46 | {
47 | $rsSections = Iblock\SectionTable::getList([
48 | 'order' => [
49 | 'SORT' => 'ASC',
50 | 'NAME' => 'ASC'
51 | ],
52 | 'filter' => [
53 | 'IBLOCK_ID' => $arCurrentValues['IBLOCK_ID'],
54 | 'ACTIVE' => 'Y'
55 | ],
56 | 'select' => [
57 | 'ID',
58 | 'NAME'
59 | ]
60 | ]);
61 |
62 | while ($arSection = $rsSections->fetch())
63 | {
64 | $sections[$arSection['ID']] = $arSection['NAME'];
65 | }
66 |
67 | $rsProperties = CIBlockProperty::GetList(
68 | [
69 | 'sort' => 'asc',
70 | 'name' => 'asc'
71 | ],
72 | [
73 | 'ACTIVE' => 'Y',
74 | 'IBLOCK_ID' => $arCurrentValues['IBLOCK_ID']
75 | ]
76 | );
77 |
78 | while ($property = $rsProperties->Fetch())
79 | {
80 | $elementProperties[$property['CODE']] = '['.$property['CODE'].'] '.$property['NAME'];
81 | }
82 | }
83 |
84 | $paramElementsFields = CIBlockParameters::GetFieldCode(Loc::getMessage('ELEMENTS_LIST_FIELDS'), 'BASE');
85 |
86 | $sortOrders = [
87 | 'ASC' => Loc::getMessage('ELEMENTS_LIST_SORT_ORDER_ASC'),
88 | 'DESC' => Loc::getMessage('ELEMENTS_LIST_SORT_ORDER_DESC')
89 | ];
90 |
91 | $arComponentParameters = [
92 | 'GROUPS' => [
93 | 'AJAX' => [
94 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_GROUP_AJAX')
95 | ],
96 | 'SEO' => [
97 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_GROUP_SEO')
98 | ],
99 | 'OTHERS' => [
100 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_GROUP_OTHERS')
101 | ]
102 | ],
103 | 'PARAMETERS' => [
104 | 'IBLOCK_TYPE' => [
105 | 'PARENT' => 'BASE',
106 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_IBLOCK_TYPE'),
107 | 'TYPE' => 'LIST',
108 | 'VALUES' => $iblockTypes,
109 | 'DEFAULT' => '',
110 | 'REFRESH' => 'Y'
111 | ],
112 | 'IBLOCK_ID' => [
113 | 'PARENT' => 'BASE',
114 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_IBLOCK_ID'),
115 | 'TYPE' => 'LIST',
116 | 'VALUES' => $iblocks,
117 | 'REFRESH' => 'Y'
118 | ],
119 | 'SECTION_ID' => [
120 | 'PARENT' => 'BASE',
121 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_SECTION_ID'),
122 | 'TYPE' => 'LIST',
123 | 'VALUES' => $sections
124 | ],
125 | 'SECTION_CODE' => [
126 | 'PARENT' => 'BASE',
127 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_SECTION_CODE'),
128 | 'TYPE' => 'STRING'
129 | ],
130 | 'INCLUDE_SUBSECTIONS' => [
131 | 'PARENT' => 'BASE',
132 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_INCLUDE_SUBSECTIONS'),
133 | 'TYPE' => 'CHECKBOX',
134 | 'DEFAULT' => 'N'
135 | ],
136 | 'SORT_BY_1' => [
137 | 'PARENT' => 'BASE',
138 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_SORT_BY_1'),
139 | 'TYPE' => 'LIST',
140 | 'VALUES' => CIBlockParameters::GetElementSortFields()
141 | ],
142 | 'SORT_ORDER_1' => [
143 | 'PARENT' => 'BASE',
144 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_SORT_ORDER_1'),
145 | 'TYPE' => 'LIST',
146 | 'VALUES' => $sortOrders
147 | ],
148 | 'SORT_BY_2' => [
149 | 'PARENT' => 'BASE',
150 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_SORT_BY_2'),
151 | 'TYPE' => 'LIST',
152 | 'VALUES' => CIBlockParameters::GetElementSortFields()
153 | ],
154 | 'SORT_ORDER_2' => [
155 | 'PARENT' => 'BASE',
156 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_SORT_ORDER_2'),
157 | 'TYPE' => 'LIST',
158 | 'VALUES' => $sortOrders
159 | ],
160 | 'SELECT_FIELDS' => $paramElementsFields,
161 | 'SELECT_PROPS' => [
162 | 'PARENT' => 'BASE',
163 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_PROPERTIES'),
164 | 'TYPE' => 'LIST',
165 | 'MULTIPLE' => 'Y',
166 | 'VALUES' => $elementProperties,
167 | 'ADDITIONAL_VALUES' => 'Y'
168 | ],
169 | 'RESULT_PROCESSING_MODE' => [
170 | 'PARENT' => 'BASE',
171 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_RESULT_PROCESSING_MODE'),
172 | 'TYPE' => 'LIST',
173 | 'VALUES' => [
174 | 'DEFAULT' => Loc::getMessage('ELEMENTS_LIST_RESULT_PROCESSING_MODE_DEFAULT'),
175 | 'EXTENDED' => Loc::getMessage('ELEMENTS_LIST_RESULT_PROCESSING_MODE_EXTENDED')
176 | ]
177 | ],
178 | 'EX_FILTER_NAME' => [
179 | 'PARENT' => 'BASE',
180 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_EX_FILTER_NAME'),
181 | 'TYPE' => 'STRING',
182 | 'DEFAULT' => ''
183 | ],
184 | 'PAGER_SAVE_SESSION' => [
185 | 'PARENT' => 'PAGER_SETTINGS',
186 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_NAV_SAVE_SESSION'),
187 | 'TYPE' => 'CHECKBOX',
188 | 'DEFAULT' => 'N'
189 | ],
190 | 'ELEMENTS_COUNT' => [
191 | 'PARENT' => 'PAGER_SETTINGS',
192 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_ELEMENTS_COUNT'),
193 | 'TYPE' => 'STRING',
194 | 'DEFAULT' => '10'
195 | ],
196 | 'USE_AJAX' => [
197 | 'PARENT' => 'AJAX',
198 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_USE_AJAX'),
199 | 'TYPE' => 'CHECKBOX',
200 | 'DEFAULT' => 'Y'
201 | ],
202 | 'AJAX_TYPE' => [
203 | 'PARENT' => 'AJAX',
204 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_AJAX_TYPE'),
205 | 'TYPE' => 'LIST',
206 | 'VALUES' => [
207 | 'DEFAULT' => Loc::getMessage('ELEMENTS_LIST_AJAX_TYPE_DEFAULT'),
208 | 'JSON' => Loc::getMessage('ELEMENTS_LIST_AJAX_TYPE_JSON')
209 | ]
210 | ],
211 | 'AJAX_HEAD_RELOAD' => [
212 | 'PARENT' => 'AJAX',
213 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_AJAX_HEAD_RELOAD'),
214 | 'TYPE' => 'CHECKBOX',
215 | 'DEFAULT' => 'N'
216 | ],
217 | 'AJAX_TEMPLATE_PAGE' => [
218 | 'PARENT' => 'AJAX',
219 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_AJAX_TEMPLATE_PAGE'),
220 | 'TYPE' => 'STRING',
221 | 'DEFAULT' => ''
222 | ],
223 | 'AJAX_COMPONENT_ID' => [
224 | 'PARENT' => 'AJAX',
225 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_AJAX_COMPONENT_ID'),
226 | 'TYPE' => 'STRING',
227 | 'DEFAULT' => ''
228 | ],
229 | 'SET_SEO_TAGS' => [
230 | 'PARENT' => 'SEO',
231 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_SET_SEO_TAGS'),
232 | 'TYPE' => 'CHECKBOX',
233 | 'DEFAULT' => 'Y'
234 | ],
235 | 'ADD_SECTIONS_CHAIN' => [
236 | 'PARENT' => 'SEO',
237 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_ADD_SECTIONS_CHAIN'),
238 | 'TYPE' => 'CHECKBOX',
239 | 'DEFAULT' => 'Y'
240 | ],
241 | 'SET_404' => [
242 | 'PARENT' => 'OTHERS',
243 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_SET_404'),
244 | 'TYPE' => 'CHECKBOX',
245 | 'DEFAULT' => 'N'
246 | ],
247 | 'CHECK_PERMISSIONS' => [
248 | 'PARENT' => 'OTHERS',
249 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_CHECK_PERMISSIONS'),
250 | 'TYPE' => 'CHECKBOX',
251 | 'DEFAULT' => 'Y'
252 | ],
253 | 'DATE_FORMAT' => CIBlockParameters::GetDateFormat(
254 | Loc::getMessage('ELEMENTS_LIST_DATE_FORMAT'),
255 | 'OTHERS'
256 | ),
257 | 'CACHE_GROUPS' => [
258 | 'PARENT' => 'CACHE_SETTINGS',
259 | 'NAME' => Loc::getMessage('ELEMENTS_LIST_CACHE_GROUPS'),
260 | 'TYPE' => 'CHECKBOX',
261 | 'DEFAULT' => 'N'
262 | ],
263 | 'CACHE_TIME' => [
264 | 'DEFAULT' => 360000
265 | ]
266 | ]
267 | ];
268 |
269 | CIBlockParameters::AddPagerSettings($arComponentParameters, Loc::getMessage('ELEMENTS_LIST_NAV_TITLE'), true, true);
270 | }
271 | catch (Exception $e)
272 | {
273 | ShowError($e->getMessage());
274 | }
--------------------------------------------------------------------------------
/elements.list/class.php:
--------------------------------------------------------------------------------
1 |
20 | */
21 | class ElementsList extends Bbc\Basis
22 | {
23 | use Bbc\Traits\Elements;
24 |
25 | protected $needModules = ['iblock'];
26 |
27 | protected $checkParams = [
28 | 'IBLOCK_TYPE' => ['type' => 'string'],
29 | 'IBLOCK_ID' => ['type' => 'int']
30 | ];
31 |
32 | protected function executeMain()
33 | {
34 | $rsElements = \CIBlockElement::GetList(
35 | $this->getParamsSort(),
36 | $this->getParamsFilters(),
37 | $this->getParamsGrouping(),
38 | $this->getParamsNavStart(),
39 | $this->getParamsSelected([
40 | 'DETAIL_PAGE_URL',
41 | 'LIST_PAGE_URL'
42 | ])
43 | );
44 |
45 | if (!isset($this->arResult['ELEMENTS']))
46 | {
47 | $this->arResult['ELEMENTS'] = [];
48 | }
49 |
50 | $processingMethod = $this->getProcessingMethod();
51 |
52 | while ($element = $rsElements->$processingMethod())
53 | {
54 | if ($arElement = $this->processingElementsResult($element))
55 | {
56 | $this->arResult['ELEMENTS'][] = $arElement;
57 | }
58 | }
59 |
60 | if ($this->arParams['SET_404'] === 'Y' && empty($this->arResult['ELEMENTS']))
61 | {
62 | $this->return404();
63 | }
64 |
65 | $this->generateNav($rsElements);
66 | $this->setResultCacheKeys(['NAV_CACHED_DATA']);
67 | }
68 | }
--------------------------------------------------------------------------------
/elements.list/lang/ru/.description.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | =$arResult['NAV_STRING']?>
5 | }?>
6 |
7 |
8 |
9 |
10 |
11 | }?>
12 |
13 |
14 | =$arResult['NAV_STRING']?>
15 | }?>
--------------------------------------------------------------------------------
/elements/.description.php:
--------------------------------------------------------------------------------
1 | Loc::getMessage('ELEMENTS_NAME'),
11 | 'DESCRIPTION' => Loc::getMessage('ELEMENTS_DESCRIPTION'),
12 | 'SORT' => 10,
13 | 'PATH' => array(
14 | 'ID' => 'basis',
15 | 'NAME' => Loc::getMessage('ELEMENTS_GROUP'),
16 | 'SORT' => 10,
17 | 'CHILD' => array(
18 | 'ID' => 'elements',
19 | 'NAME' => Loc::getMessage('ELEMENTS_CHILD_GROUP'),
20 | 'SORT' => 10
21 | )
22 | )
23 | );
--------------------------------------------------------------------------------
/elements/.parameters.php:
--------------------------------------------------------------------------------
1 | [
22 | 'LIST' => [
23 | 'NAME' => Loc::getMessage('ELEMENTS_GROUP_LIST'),
24 | 'SORT' => '200'
25 | ],
26 | 'DETAIL' => [
27 | 'NAME' => Loc::getMessage('ELEMENTS_GROUP_DETAIL'),
28 | 'SORT' => '300'
29 | ]
30 | ],
31 | 'PARAMETERS' => [
32 | 'SEF_MODE' => [
33 | 'index' => [
34 | 'NAME' => Loc::getMessage('ELEMENTS_SEF_INDEX'),
35 | 'DEFAULT' => '',
36 | 'VARIABLES' => []
37 | ],
38 | 'section' => [
39 | 'NAME' => Loc::getMessage('ELEMENTS_SEF_SECTION'),
40 | 'DEFAULT' => '#SECTION_CODE#/',
41 | 'VARIABLES' => ['SECTION_ID', 'SECTION_CODE', 'SECTION_CODE_PATH']
42 | ],
43 | 'detail' => [
44 | 'NAME' => Loc::getMessage('ELEMENTS_SEF_DETAIL'),
45 | 'DEFAULT' => '#SECTION_CODE#/#ELEMENT_CODE#/',
46 | 'VARIABLES' => ['ELEMENT_ID', 'ELEMENT_CODE', 'SECTION_ID', 'SECTION_CODE', 'SECTION_CODE_PATH']
47 | ],
48 | 'smart_filter' => [
49 | 'NAME' => Loc::getMessage('ELEMENTS_SEF_SMART_FILTER'),
50 | 'DEFAULT' => '#SECTION_CODE#/filter/#SMART_FILTER_PATH#/apply/',
51 | 'VARIABLES' => ['SECTION_ID', 'SECTION_CODE', 'SECTION_CODE_PATH', 'SMART_FILTER_PATH']
52 | ]
53 | ],
54 | 'USE_SEARCH' => [
55 | 'PARENT' => 'OTHERS',
56 | 'NAME' => Loc::getMessage('ELEMENTS_DETAIL_PARAMETERS_USE_SEARCH'),
57 | 'TYPE' => 'CHECKBOX',
58 | 'DEFAULT' => 'N'
59 | ]
60 | ]
61 | ];
62 |
63 | $paramsElementsList = ComponentParameters::getParameters(
64 | $currentZone.':elements.list',
65 | [
66 | 'SECTION_ID' => [
67 | 'DELETE' => true
68 | ],
69 | 'SECTION_CODE' => [
70 | 'DELETE' => true
71 | ],
72 | 'SELECT_FIELDS' => [
73 | 'RENAME' => 'LIST_SELECT_FIELDS',
74 | 'MOVE' => 'LIST'
75 | ],
76 | 'SELECT_PROPS' => [
77 | 'RENAME' => 'LIST_SELECT_PROPS',
78 | 'MOVE' => 'LIST'
79 | ],
80 | 'RESULT_PROCESSING_MODE' => [
81 | 'RENAME' => 'LIST_RESULT_PROCESSING_MODE',
82 | 'MOVE' => 'LIST'
83 | ],
84 | 'SORT_BY_1' => [
85 | 'MOVE' => 'LIST'
86 | ],
87 | 'SORT_ORDER_1' => [
88 | 'MOVE' => 'LIST'
89 | ],
90 | 'SORT_BY_2' => [
91 | 'MOVE' => 'LIST'
92 | ],
93 | 'SORT_ORDER_2' => [
94 | 'MOVE' => 'LIST'
95 | ],
96 | 'DATE_FORMAT' => [
97 | 'RENAME' => 'LIST_DATE_FORMAT',
98 | 'MOVE' => 'LIST'
99 | ]
100 | ],
101 | $arCurrentValues
102 | );
103 |
104 | $paramsElementsDetail = ComponentParameters::getParameters(
105 | $currentZone.':elements.detail',
106 | [
107 | 'ELEMENT_ID' => [
108 | 'DELETE' => true
109 | ],
110 | 'ELEMENT_CODE' => [
111 | 'DELETE' => true
112 | ],
113 | 'SELECT_FIELDS' => [
114 | 'RENAME' => 'DETAIL_SELECT_FIELDS',
115 | 'MOVE' => 'DETAIL'
116 | ],
117 | 'SELECT_PROPS' => [
118 | 'RENAME' => 'DETAIL_SELECT_PROPS',
119 | 'MOVE' => 'DETAIL'
120 | ],
121 | 'RESULT_PROCESSING_MODE' => [
122 | 'RENAME' => 'DETAIL_RESULT_PROCESSING_MODE',
123 | 'MOVE' => 'DETAIL'
124 | ],
125 | 'DATE_FORMAT' => [
126 | 'RENAME' => 'DETAIL_DATE_FORMAT',
127 | 'MOVE' => 'DETAIL'
128 | ],
129 | 'OG_TAGS_TITLE' => [
130 | 'RENAME' => 'DETAIL_OG_TAGS_TITLE'
131 | ],
132 | 'OG_TAGS_DESCRIPTION' => [
133 | 'RENAME' => 'DETAIL_OG_TAGS_DESCRIPTION'
134 | ],
135 | 'OG_TAGS_IMAGE' => [
136 | 'RENAME' => 'DETAIL_OG_TAGS_IMAGE'
137 | ],
138 | 'OG_TAGS_URL' => [
139 | 'RENAME' => 'DETAIL_OG_TAGS_URL'
140 | ]
141 | ],
142 | $arCurrentValues
143 | );
144 |
145 | $arComponentParameters = array_replace_recursive($currentParameters, $paramsElementsList, $paramsElementsDetail);
146 | }
147 | catch (\Exception $e)
148 | {
149 | ShowError($e->getMessage());
150 | }
151 |
--------------------------------------------------------------------------------
/elements/class.php:
--------------------------------------------------------------------------------
1 |
18 | */
19 | class ElementsRouter extends BasisRouter
20 | {
21 | protected $defaultSefPage = 'index';
22 |
23 | protected function setSefDefaultParams()
24 | {
25 | $this->defaultUrlTemplates404 = [
26 | 'index' => '',
27 | 'section' => '#SECTION_ID#/',
28 | 'detail' => '#SECTION_ID#/#ELEMENT_ID#/'
29 | ];
30 |
31 | $this->componentVariables = [
32 | 'SECTION_ID',
33 | 'SECTION_CODE',
34 | 'ELEMENT_ID',
35 | 'ELEMENT_CODE'
36 | ];
37 | }
38 | }
--------------------------------------------------------------------------------
/elements/lang/ru/.description.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | $APPLICATION->IncludeComponent('bbc:elements.detail', '.default', array(
4 | 'IBLOCK_TYPE' => $arParams['IBLOCK_TYPE'],
5 | 'IBLOCK_ID' => $arParams['IBLOCK_ID'],
6 | 'ELEMENT_ID' => $arResult['VARIABLES']['ELEMENT_ID'],
7 | 'ELEMENT_CODE' => $arResult['VARIABLES']['ELEMENT_CODE'],
8 | 'SELECT_FIELDS' => $arParams['DETAIL_SELECT_FIELDS'],
9 | 'SELECT_PROPS' => $arParams['DETAIL_SELECT_PROPS'],
10 | 'RESULT_PROCESSING_MODE' => $arParams['DETAIL_RESULT_PROCESSING_MODE'],
11 | 'ADD_SECTIONS_CHAIN' => $arParams['ADD_SECTIONS_CHAIN'],
12 | 'ADD_ELEMENT_CHAIN' => $arParams['ADD_ELEMENT_CHAIN'],
13 | 'CACHE_GROUPS' => $arParams['CACHE_GROUPS'],
14 | 'CACHE_TYPE' => $arParams['CACHE_TYPE'],
15 | 'CACHE_TIME' => $arParams['CACHE_TIME'],
16 | 'SET_404' => $arParams['SET_404'],
17 | 'DATE_FORMAT' => $arParams['DETAIL_DATE_FORMAT'],
18 | 'SET_SEO_TAGS' => $arParams['SET_SEO_TAGS']
19 | ),
20 | $component
21 | );?>
--------------------------------------------------------------------------------
/elements/templates/.default/index.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | $APPLICATION->IncludeComponent('bbc:elements.list', '.default', array(
4 | 'IBLOCK_TYPE' => $arParams['IBLOCK_TYPE'],
5 | 'IBLOCK_ID' => $arParams['IBLOCK_ID'],
6 | 'INCLUDE_SUBSECTIONS' => $arParams['INCLUDE_SUBSECTIONS'],
7 | 'SORT_BY_1' => $arParams['SORT_BY_1'],
8 | 'SORT_ORDER_1' => $arParams['SORT_ORDER_1'],
9 | 'SORT_BY_2' => $arParams['SORT_BY_2'],
10 | 'SORT_ORDER_2' => $arParams['SORT_ORDER_2'],
11 | 'SELECT_FIELDS' => $arParams['LIST_SELECT_FIELDS'],
12 | 'SELECT_PROPS' => $arParams['LIST_SELECT_PROPS'],
13 | 'RESULT_PROCESSING_MODE' => $arParams['LIST_RESULT_PROCESSING_MODE'],
14 | 'ADD_SECTIONS_CHAIN' => $arParams['ADD_SECTIONS_CHAIN'],
15 | 'CACHE_GROUPS' => $arParams['CACHE_GROUPS'],
16 | 'CACHE_TYPE' => $arParams['CACHE_TYPE'],
17 | 'CACHE_TIME' => $arParams['CACHE_TIME'],
18 | 'SET_404' => $arParams['SET_404'],
19 | 'CHECK_PERMISSIONS' => $arParams['CHECK_PERMISSIONS'],
20 | 'DATE_FORMAT' => $arParams['LIST_DATE_FORMAT'],
21 | 'SET_SEO_TAGS' => $arParams['SET_SEO_TAGS'],
22 | 'PAGER_SAVE_SESSION' => $arParams['PAGER_SAVE_SESSION'],
23 | 'ELEMENTS_COUNT' => $arParams['ELEMENTS_COUNT'],
24 | 'USE_SEARCH' => $arParams['USE_SEARCH'],
25 | 'EX_FILTER_NAME' => $arParams['EX_FILTER_NAME'],
26 | 'USE_AJAX' => $arParams['USE_AJAX'],
27 | 'AJAX_TYPE' => $arParams['AJAX_TYPE'],
28 | 'AJAX_HEAD_RELOAD' => $arParams['AJAX_HEAD_RELOAD'],
29 | 'AJAX_TEMPLATE_PAGE' => $arParams['AJAX_TEMPLATE_PAGE'],
30 | 'PAGER_TEMPLATE' => $arParams['PAGER_TEMPLATE'],
31 | 'DISPLAY_TOP_PAGER' => $arParams['DISPLAY_TOP_PAGER'],
32 | 'DISPLAY_BOTTOM_PAGER' => $arParams['DISPLAY_BOTTOM_PAGER'],
33 | 'PAGER_TITLE' => $arParams['PAGER_TITLE'],
34 | 'PAGER_SHOW_ALWAYS' => $arParams['PAGER_SHOW_ALWAYS'],
35 | 'PAGER_DESC_NUMBERING' => $arParams['PAGER_DESC_NUMBERING'],
36 | 'PAGER_DESC_NUMBERING_CACHE_TIME' => $arParams['PAGER_DESC_NUMBERING_CACHE_TIME'],
37 | 'PAGER_SHOW_ALL' => $arParams['PAGER_SHOW_ALL']
38 | ),
39 | $component
40 | );?>
--------------------------------------------------------------------------------
/elements/templates/.default/search.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | Search page
--------------------------------------------------------------------------------
/elements/templates/.default/section.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | $APPLICATION->IncludeComponent('bbc:elements.list', '.default', array(
4 | 'IBLOCK_TYPE' => $arParams['IBLOCK_TYPE'],
5 | 'IBLOCK_ID' => $arParams['IBLOCK_ID'],
6 | 'SECTION_ID' => $arResult['VARIABLES']['SECTION_ID'],
7 | 'SECTION_CODE' => $arResult['VARIABLES']['SECTION_CODE'],
8 | 'INCLUDE_SUBSECTIONS' => $arParams['INCLUDE_SUBSECTIONS'],
9 | 'SORT_BY_1' => $arParams['SORT_BY_1'],
10 | 'SORT_ORDER_1' => $arParams['SORT_ORDER_1'],
11 | 'SORT_BY_2' => $arParams['SORT_BY_2'],
12 | 'SORT_ORDER_2' => $arParams['SORT_ORDER_2'],
13 | 'SELECT_FIELDS' => $arParams['LIST_SELECT_FIELDS'],
14 | 'SELECT_PROPS' => $arParams['LIST_SELECT_PROPS'],
15 | 'RESULT_PROCESSING_MODE' => $arParams['LIST_RESULT_PROCESSING_MODE'],
16 | 'ADD_SECTIONS_CHAIN' => $arParams['ADD_SECTIONS_CHAIN'],
17 | 'CACHE_GROUPS' => $arParams['CACHE_GROUPS'],
18 | 'CACHE_TYPE' => $arParams['CACHE_TYPE'],
19 | 'CACHE_TIME' => $arParams['CACHE_TIME'],
20 | 'SET_404' => $arParams['SET_404'],
21 | 'CHECK_PERMISSIONS' => $arParams['CHECK_PERMISSIONS'],
22 | 'DATE_FORMAT' => $arParams['LIST_DATE_FORMAT'],
23 | 'SET_SEO_TAGS' => $arParams['SET_SEO_TAGS'],
24 | 'PAGER_SAVE_SESSION' => $arParams['PAGER_SAVE_SESSION'],
25 | 'ELEMENTS_COUNT' => $arParams['ELEMENTS_COUNT'],
26 | 'USE_SEARCH' => $arParams['USE_SEARCH'],
27 | 'EX_FILTER_NAME' => $arParams['EX_FILTER_NAME'],
28 | 'USE_AJAX' => $arParams['USE_AJAX'],
29 | 'AJAX_TYPE' => $arParams['AJAX_TYPE'],
30 | 'AJAX_HEAD_RELOAD' => $arParams['AJAX_HEAD_RELOAD'],
31 | 'AJAX_TEMPLATE_PAGE' => $arParams['AJAX_TEMPLATE_PAGE'],
32 | 'PAGER_TEMPLATE' => $arParams['PAGER_TEMPLATE'],
33 | 'DISPLAY_TOP_PAGER' => $arParams['DISPLAY_TOP_PAGER'],
34 | 'DISPLAY_BOTTOM_PAGER' => $arParams['DISPLAY_BOTTOM_PAGER'],
35 | 'PAGER_TITLE' => $arParams['PAGER_TITLE'],
36 | 'PAGER_SHOW_ALWAYS' => $arParams['PAGER_SHOW_ALWAYS'],
37 | 'PAGER_DESC_NUMBERING' => $arParams['PAGER_DESC_NUMBERING'],
38 | 'PAGER_DESC_NUMBERING_CACHE_TIME' => $arParams['PAGER_DESC_NUMBERING_CACHE_TIME'],
39 | 'PAGER_SHOW_ALL' => $arParams['PAGER_SHOW_ALL']
40 | ),
41 | $component
42 | );?>
--------------------------------------------------------------------------------