1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
component_engine.php
См. документацию.
1<?php
8
10{
11 public $cacheSalt = '';
12
13 private $component = null;
14 private $greedyParts = array();
15 private $resolveCallback = false;
22 function __construct($component = null)
23 {
24 if ($component instanceof CBitrixComponent)
25 $this->component = $component;
26 }
27
33 public function getComponent()
34 {
35 return $this->component;
36 }
37
44 public function addGreedyPart($part)
45 {
46 $part = trim($part, " \t\n\r#");
47 if ($part != "")
48 $this->greedyParts[$part] = preg_quote($part, "'");
49 }
50
57 public function setResolveCallback($resolveCallback)
58 {
59 if (is_callable($resolveCallback))
60 $this->resolveCallback = $resolveCallback;
61 }
62
70 public static function checkComponentName($componentName)
71 {
72 return ($componentName <> '' && preg_match("#^([A-Za-z0-9_.-]+:)?([A-Za-z0-9_-]+\\.)*([A-Za-z0-9_-]+)$#i", $componentName));
73 }
74
81 public static function makeComponentPath($componentName)
82 {
84 return "";
85
86 return "/".str_replace(":", "/", $componentName);
87 }
88
95 public function hasNoVariables($pageTemplate)
96 {
97 return !str_contains($pageTemplate, "#");
98 }
99
106 public function hasGreedyParts($pageTemplate)
107 {
108 if (
109 !empty($this->greedyParts)
110 && preg_match("'#(?:".implode("|", $this->greedyParts).")#'", $pageTemplate)
111 )
112 return true;
113 else
114 return false;
115 }
116
125 protected function sortUrlTemplates($arUrlTemplates, &$bHasGreedyPartsInTemplates)
126 {
127 $resultNoHash = array();
128 $resultWithHash = array();
129 $resultWithGreedy = array();
130
131 foreach ($arUrlTemplates as $pageID => $pageTemplate)
132 {
133 $pos = mb_strpos($pageTemplate, "?");
134 if ($pos !== false)
135 $pageTemplate = mb_substr($pageTemplate, 0, $pos);
136
137 if ($this->hasNoVariables($pageTemplate))
138 $resultNoHash[$pageID] = $pageTemplate;
139 elseif ($this->hasGreedyParts($pageTemplate))
140 $resultWithGreedy[$pageID] = $pageTemplate;
141 else
142 $resultWithHash[$pageID] = $pageTemplate;
143 }
144 $bHasGreedyPartsInTemplates = !empty($resultWithGreedy);
145 return array_merge($resultNoHash, $resultWithHash, $resultWithGreedy);
146 }
147
157 protected function __checkPath4Template($pageTemplate, $currentPageUrl, &$arVariables)
158 {
159 if (!empty($this->greedyParts))
160 {
161 $pageTemplateReg = preg_replace("'#(?:".implode("|", $this->greedyParts).")#'", "(.+?)", $pageTemplate);
162 $pageTemplateReg = preg_replace("'#[^#]+?#'", "([^/]+?)", $pageTemplateReg);
163 }
164 else
165 {
166 $pageTemplateReg = preg_replace("'#[^#]+?#'", "([^/]+?)", $pageTemplate);
167 }
168
169 if (mb_substr($pageTemplateReg, -1, 1) == "/")
170 $pageTemplateReg .= "index\\.php";
171
172 $arValues = array();
173 if (preg_match("'^".$pageTemplateReg."$'", $currentPageUrl, $arValues))
174 {
175 $arMatches = array();
176 if (preg_match_all("'#([^#]+?)#'", $pageTemplate, $arMatches))
177 {
178 for ($i = 0, $cnt = count($arMatches[1]); $i < $cnt; $i++)
179 $arVariables[$arMatches[1][$i]] = $arValues[$i + 1];
180 }
181 return true;
182 }
183
184 return false;
185 }
186
196 public static function parseComponentPath($folder404, $arUrlTemplates, &$arVariables, $requestURL = false)
197 {
199 return $engine->guessComponentPath($folder404, $arUrlTemplates, $arVariables, $requestURL);
200 }
201
212 public function guessComponentPath($folder404, $arUrlTemplates, &$arVariables, $requestURL = false)
213 {
214 if (!isset($arVariables) || !is_array($arVariables))
215 $arVariables = array();
216
217 if ($requestURL === false)
218 $requestURL = Bitrix\Main\Context::getCurrent()->getRequest()->getRequestedPage();
219
220 $folder404 = str_replace("\\", "/", $folder404);
221 if ($folder404 != "/")
222 $folder404 = "/".trim($folder404, "/ \t\n\r\0\x0B")."/";
223
224 //SEF base URL must match curent URL (several components on the same page)
225 if(mb_strpos($requestURL, $folder404) !== 0)
226 return false;
227
228 $currentPageUrl = mb_substr($requestURL, mb_strlen($folder404));
229 $this->cacheSalt = md5($currentPageUrl);
230
231 $pageCandidates = array();
232 $arUrlTemplates = $this->sortUrlTemplates($arUrlTemplates, $bHasGreedyPartsInTemplates);
233 if (
234 $bHasGreedyPartsInTemplates
235 && is_callable($this->resolveCallback)
236 )
237 {
238 foreach ($arUrlTemplates as $pageID => $pageTemplate)
239 {
240 $arVariablesTmp = $arVariables;
241 if ($this->__CheckPath4Template($pageTemplate, $currentPageUrl, $arVariablesTmp))
242 {
243 if ($this->hasNoVariables($pageTemplate))
244 {
245 $arVariables = $arVariablesTmp;
246 return $pageID;
247 }
248 else
249 {
250 $pageCandidates[$pageID] = $arVariablesTmp;
251 }
252 }
253 }
254 }
255 else
256 {
257 foreach ($arUrlTemplates as $pageID => $pageTemplate)
258 {
259 if ($this->__CheckPath4Template($pageTemplate, $currentPageUrl, $arVariables))
260 {
261 return $pageID;
262 }
263 }
264 }
265
266 if (!empty($pageCandidates) && is_callable($this->resolveCallback))
267 {
268 return call_user_func_array($this->resolveCallback, array($this, $pageCandidates, &$arVariables));
269 }
270
271 return false;
272 }
273
283 public static function initComponentVariables($componentPage, $arComponentVariables, $arVariableAliases, &$arVariables)
284 {
285 if (!isset($arVariables) || !is_array($arVariables))
286 $arVariables = array();
287
288 if ($componentPage)
289 {
290 if (array_key_exists($componentPage, $arVariableAliases) && is_array($arVariableAliases[$componentPage]))
291 {
292 foreach ($arVariableAliases[$componentPage] as $variableName => $aliasName)
293 if (!array_key_exists($variableName, $arVariables) && array_key_exists($aliasName, $_REQUEST))
294 $arVariables[$variableName] = $_REQUEST[$aliasName];
295 }
296 }
297 else
298 {
299 foreach ($arVariableAliases as $variableName => $aliasName)
300 if (!array_key_exists($variableName, $arVariables))
301 if (is_string($aliasName) && array_key_exists($aliasName, $_REQUEST))
302 $arVariables[$variableName] = $_REQUEST[$aliasName];
303 }
304
306 {
307 for ($i = 0, $cnt = count($arComponentVariables); $i < $cnt; $i++)
308 {
309 if (!array_key_exists($arComponentVariables[$i], $arVariables)
310 && array_key_exists($arComponentVariables[$i], $_REQUEST))
311 {
313 }
314 }
315 }
316 }
317
325 public static function makeComponentUrlTemplates($arDefaultUrlTemplates, $arCustomUrlTemplates)
326 {
327 if (!is_array($arCustomUrlTemplates))
328 $arCustomUrlTemplates = array();
329
330 return array_merge($arDefaultUrlTemplates, $arCustomUrlTemplates);
331 }
332
340 public static function makeComponentVariableAliases($arDefaultVariableAliases, $arCustomVariableAliases)
341 {
342 if (!is_array($arCustomVariableAliases))
343 $arCustomVariableAliases = array();
344
345 return array_merge($arDefaultVariableAliases, $arCustomVariableAliases);
346 }
347
355 public static function makePathFromTemplate($template, $arParams = array())
356 {
357 $arPatterns = array("#SITE_DIR#", "#SITE#", "#SERVER_NAME#");
358 $arReplace = array(SITE_DIR, SITE_ID, SITE_SERVER_NAME);
359 foreach ($arParams as $key => $value)
360 {
361 $arPatterns[] = "#".$key."#";
362 $arReplace[] = $value;
363 }
364 return str_replace($arPatterns, $arReplace, $template);
365 }
366}
$arParams
Определения access_dialog.php:21
static makeComponentVariableAliases($arDefaultVariableAliases, $arCustomVariableAliases)
Определения component_engine.php:340
__construct($component=null)
Определения component_engine.php:22
getComponent()
Определения component_engine.php:33
setResolveCallback($resolveCallback)
Определения component_engine.php:57
static makeComponentPath($componentName)
Определения component_engine.php:81
static parseComponentPath($folder404, $arUrlTemplates, &$arVariables, $requestURL=false)
Определения component_engine.php:196
static checkComponentName($componentName)
Определения component_engine.php:70
__checkPath4Template($pageTemplate, $currentPageUrl, &$arVariables)
Определения component_engine.php:157
static makePathFromTemplate($template, $arParams=array())
Определения component_engine.php:355
hasGreedyParts($pageTemplate)
Определения component_engine.php:106
static initComponentVariables($componentPage, $arComponentVariables, $arVariableAliases, &$arVariables)
Определения component_engine.php:283
guessComponentPath($folder404, $arUrlTemplates, &$arVariables, $requestURL=false)
Определения component_engine.php:212
addGreedyPart($part)
Определения component_engine.php:44
static makeComponentUrlTemplates($arDefaultUrlTemplates, $arCustomUrlTemplates)
Определения component_engine.php:325
hasNoVariables($pageTemplate)
Определения component_engine.php:95
sortUrlTemplates($arUrlTemplates, &$bHasGreedyPartsInTemplates)
Определения component_engine.php:125
$componentName
Определения component_props2.php:49
$arValues
Определения component_props.php:25
$template
Определения file_edit.php:49
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
$arComponentVariables
Определения group_wiki_post_comment.php:4
const SITE_DIR(!defined('LANG'))
Определения include.php:72
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$engine
Определения options.php:121
const SITE_ID
Определения sonet_set_content_view.php:12