├── 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 |

4 | 5 | -------------------------------------------------------------------------------- /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 | 5 | 6 | 7 | 8 | 9 |

10 | 11 | 12 | 13 | 14 | 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 | 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 | 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 | 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 | );?> --------------------------------------------------------------------------------