function ddGetDocs($parentIds = array(0), $filter = array(), $depth = 1, $labelMask = '[+pagetitle+] ([+id+])', $fields = array('pagetitle', 'id')) { //Получаем дочерние документы текущего уровня $docs = array(); //Перебираем всех родителей foreach ($parentIds as $parent) { //Получаем документы текущего родителя $tekDocs = ddTools::getDocumentChildrenTVarOutput($parent, $fields, false); //Если что-то получили if (is_array($tekDocs)) { //Запомним $docs = array_merge($docs, $tekDocs); } } $result = array(); //Если что-то есть if (count($docs) > 0) { //Перебираем полученные документы foreach ($docs as $val) { //Если фильтр пустой, либо не пустой и документ удовлетворяет всем условиям if (empty($filter) || count(array_intersect_assoc($filter, $val)) == count($filter)) { $val['title'] = empty($val['menutitle']) ? $val['pagetitle'] : $val['menutitle']; //Записываем результат $tmp = ddTools::parseText($labelMask, $val, '[+', '+]', false); if (strlen(trim($tmp)) == 0) { $tmp = ddTools::parseText('[+pagetitle+] ([+id+])', $val, '[+', '+]', false); } $result[] = array('label' => $tmp, 'value' => $val['id']); } //Если ещё надо двигаться глубже if ($depth > 1) { //Сливаем результат с дочерними документами $result = array_merge($result, ddGetDocs(array($val['id']), $filter, $depth - 1, $labelMask, $fields)); } } } return $result; }
/** * mm_ddAutoFolders * @version 1.0.2 (2013-05-30) * * При сохранении (событие OnBeforeDocFormSave) автоматически перемещает необходимый документ, основываясь на его дате (дата публикации, или любая дата в tv) в папку года и месяца. Если папки (документы) года и/или месяца ещё не созданы, они создадутся автоматически. * * @uses ManagerManager plugin 0.5 * * @param $ddRoles {comma separated string} - ID ролей, к которым необходимо применить правило. Default: ''. * @param $ddTemplates {comma separated string} - ID шаблонов, к которым необходимо применить правило. Default: ''. * @param $ddParent {integer} - ID корневого родителя. @required * @param $ddDateSource {string} - Поле, откуда необходимо брать дату. Default: 'pub_date'. * @param $ddYearTpl {integer} - ID шаблона, который необходимо выставлять документам-годам. Default: 0. * @param $ddMonthTpl {integer} - ID шаблона, который необходимо выставлять документам-месяцам. Default: 0. * @param $ddYearPub {0; 1} - Надо ли публиковать документы-годы. Default: 0. * @param $ddMonthPub {0; 1} - Надо ли публиковать документы-месяцы. Default: 0. * * @link http://code.divandesign.ru/modx/mm_ddautofolders/1.0.2 * * @copyright 2013, DivanDesign * http://www.DivanDesign.ru */ function mm_ddAutoFolders($ddRoles = '', $ddTemplates = '', $ddParent = '', $ddDateSource = 'pub_date', $ddYearTpl = 0, $ddMonthTpl = 0, $ddYearPub = '0', $ddMonthPub = '0') { global $modx, $id, $pub_date, $parent, $template, $document_groups, $tmplvars, $mm_fields, $modx_lang_attribute; $e =& $modx->Event; //$ddParent is required if (is_numeric($ddParent) && $e->name == 'OnBeforeDocFormSave' && useThisRule($ddRoles, $ddTemplates)) { $base_path = $modx->config['base_path']; $widgetDir = $base_path . 'assets/plugins/managermanager/widgets/ddautofolders/'; //Подключаем библиотеку ddTools // require_once $widgetDir.'modx.ddtools.class.php'; //Текущее правило $rule = array(); //Дата $ddDate = array(); //Если задано, откуда брать дату и это не дата публикации, пытаемся найти в tv`шках if ($ddDateSource && $ddDateSource != 'pub_date') { //Получаем tv с датой для данного шаблона $dateTv = tplUseTvs($template, $ddDateSource); //Если tv удалось получить, такая tv есть и есть её значение if ($dateTv && $dateTv[0]['id'] && $tmplvars[$dateTv[0]['id']] && $tmplvars[$dateTv[0]['id']][1]) { //Если дата в юникс-времени if (is_numeric($tmplvars[$dateTv[0]['id']][1])) { $ddDate['date'] = $tmplvars[$dateTv[0]['id']][1]; } else { //Пытаемся преобразовать в unix-время $ddDate['date'] = strtotime($tmplvars[$dateTv[0]['id']][1]); } //Пытаемся преобразовать в unix-время if (!is_numeric($tmplvars[$dateTv[0]['id']][1])) { $ddDate['date'] = strtotime($tmplvars[$dateTv[0]['id']][1]); } } } else { $ddDate['date'] = $pub_date; } //Если не задана дата, выбрасываем if (!$ddDate['date']) { return; } //Псевдонимы родителей (какие должны быть) //Год в формате 4 цифры $ddDate['y'] = date('Y', $ddDate['date']); //Название месяца на английском $ddDate['m'] = strtolower(date('F', $ddDate['date'])); //Порядковый номер месяца $ddDate['n'] = date('n', $ddDate['date']); //Если язык админки — русский if (strtolower($modx_lang_attribute) == 'ru') { //Все месяцы на русском $ruMonthes = array('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'); //Название месяца на русском $ddDate['mTitle'] = $ruMonthes[$ddDate['n'] - 1]; } else { //Просто запишем на английском $ddDate['mTitle'] = date('F', $ddDate['date']); } //Получаем список групп документов, к которым принадлежит текущий документ (пригодится при создании годов и месяцев) $docGroups = preg_replace('/,\\d*/', '', $document_groups); //Получаем псевдоним корневого родителя $ultimateAlias = ''; //Если корневой родитель не в корне, допишем путь к нему if ($modx->aliasListing[$ddParent]['path'] != '') { $ultimateAlias .= $modx->aliasListing[$ddParent]['path'] . '/'; } $ultimateAlias .= $modx->aliasListing[$ddParent]['alias']; //Получаем годы (непосредственных детей корневого родителя) $years = $modx->getChildIds($ddParent, 1); //Получаем id нужного нам года $yearId = $years[$ultimateAlias . '/' . $ddDate['y']]; //Если нужный год существует if ($yearId) { //Проставим году нужные параметры ddTools::udateDocument($yearId, array('isfolder' => 1, 'template' => $ddYearTpl, 'published' => $ddYearPub)); //Получаем месяцы (непосредственных детей текущего года) $months = $modx->getChildIds($yearId, 1); //Получаем id нужного нам месяца $monthId = $months[$ultimateAlias . '/' . $ddDate['y'] . '/' . $ddDate['m']]; //Если нужный год не существует } else { //Создадим его $yearId = ddTools::createDocument(array('pagetitle' => $ddDate['y'], 'alias' => $ddDate['y'], 'parent' => $ddParent, 'isfolder' => 1, 'template' => $ddYearTpl, 'menuindex' => $ddDate['y'] - 2000, 'published' => $ddYearPub), $docGroups); } // if (!$monthId && $yearId){ //Если нужный месяц существует if ($monthId) { //Проставим месяцу нужные параметры ddTools::udateDocument($monthId, array('isfolder' => 1, 'template' => $ddMonthTpl, 'published' => $ddMonthPub)); //Если нужный месяц не существует (на всякий случай проверим ещё и год) } else { if ($yearId) { $monthId = ddTools::createDocument(array('pagetitle' => $ddDate['mTitle'], 'alias' => $ddDate['m'], 'parent' => $yearId, 'isfolder' => 1, 'template' => $ddMonthTpl, 'menuindex' => $ddDate['n'] - 1, 'published' => $ddMonthPub), $docGroups); } } //Ещё раз на всякий случай проверим, что с месяцем всё хорошо if ($monthId && $monthId != $parent) { $parent = $monthId; } } }
/** * mm_ddReadonly * @version 1.0.1 (2013-07-13) * * @desc Makes fields only readable. * * @uses ManagerManager plugin 0.5.1. * * @param $fields {comma separated string} - The name(s) of the document fields (or TVs) for which the widget is applying. @required * @param $roles {comma separated string} - The roles that the widget is applied to (when this parameter is empty then widget is applied to the all roles). Default: ''. * @param $templates {comma separated string} - Templates IDs for which the widget is applying (empty value means the widget is applying to all templates). Default: ''. * * @link http://code.divandesign.biz/modx/mm_ddreadonly/1.0.1 * * @copyright 2013, DivanDesign * http://www.DivanDesign.biz */ function mm_ddReadonly($fields = '', $roles = '', $templates = '') { global $modx, $mm_fields, $mm_current_page; $e =& $modx->Event; if (!useThisRule($roles, $templates)) { return; } //Перед сохранением документа if ($e->name == 'OnBeforeDocFormSave') { //Если создаётся новый документ, у него нет никакого id ещё, да и нам пофиг, т.к. никто ничего с ним всё равно не мог сделать до сохранения if ($e->params['mode'] == 'new') { return; } //ID документа $docId = $e->params['id']; //Если нужная переменная в сессии не определена, определим if (!is_array($_SESSION['mm_ddReadonly'])) { $_SESSION['mm_ddReadonly'] = array(); } //Разбиваем переданные поля в массивчик $fields = makeArray($fields); //Получаем id TV. TODO: Оптимизировать, чтобы всё было в один запрос $tvs = tplUseTvs($mm_current_page['template'], $fields, '', 'id,name'); //Результат $resultFields = array(); //Если что-то оплучили if (is_array($tvs) && count($tvs) > 0) { $tvsNames = array(); //Пробежимся, переделаем под удобный нам формат foreach ($tvs as $val) { $tvsNames[$val['id']] = $val['name']; } //Получаем значения TV $tvs = $modx->db->makeArray($modx->db->select('value,tmplvarid AS id', ddTools::$tables['site_tmplvar_contentvalues'], 'contentid=' . $docId . ' AND tmplvarid IN ' . makeSqlList(array_keys($tvsNames)))); //Если что-то нашлось if (count($tvs) > 0) { //Пробежимся foreach ($tvs as $val) { //Если значение не пустое if ($val['value'] != '') { //Запишем значения $resultFields[$tvsNames[$val['id']]] = $val['value']; } } } } //Перебираем поля foreach ($fields as $key => $val) { //Если такого поля нет или это TV if (!isset($mm_fields[$val]) || $mm_fields[$val]['tv'] == 1) { //Снесём unset($fields[$key]); } } if (count($fields) > 0) { //Получаем значения необходимых полей $fields = $modx->db->getRow($modx->db->select(implode(',', $fields), ddTools::$tables['site_content'], 'id=' . $docId)); //Переберём foreach ($fields as $key => $val) { if ($val != '') { $resultFields[$key] = $val; } } } //Если хоть что-то осталось if (count($resultFields) > 0) { //Сохраним значения в сессию, они нам ещё понадобятся $_SESSION['mm_ddReadonly'][$docId] = $resultFields; } //После сохранения документа } else { if ($e->name == 'OnDocFormSave') { //Если создаётся новый документ, у него нет никакого id ещё, да и нам пофиг, т.к. никто ничего с ним всё равно не мог сделать до сохранения if ($e->params['mode'] == 'new') { return; } //ID документа $docId = $e->params['id']; //Если данные о текущем документе есть if (is_array($_SESSION['mm_ddReadonly']) && is_array($_SESSION['mm_ddReadonly'][$docId]) && count($_SESSION['mm_ddReadonly'][$docId]) > 0) { //Обновляем данные документа в соответствии с тем, что было раньше ddTools::updateDocument($docId, $_SESSION['mm_ddReadonly'][$docId]); //Сносим за ненадобностью unset($_SESSION['mm_ddReadonly'][$docId]); } //При копировании документа } else { if ($e->name == 'OnDocDuplicate') { //Получаем id TV $tvs = tplUseTvs($mm_current_page['template'], $fields); //Если что-то оплучили if (is_array($tvs) && count($tvs) > 0) { $tvIds = array(); foreach ($tvs as $val) { $tvIds[] = $val['id']; } //Удаляем значение TV для данного документа $modx->db->delete(ddTools::$tables['site_tmplvar_contentvalues'], '`contentid` = ' . $e->params['new_id'] . ' AND `tmplvarid` IN(' . implode(',', $tvIds) . ')'); } //При рендере документа } else { if ($e->name == 'OnDocFormRender') { //Разбиваем переданные поля в массивчик $fields = makeArray($fields); //Если есть что-то if (count($fields) > 0) { $output = "// ---------------- mm_ddReadonly :: Begin ------------- \n"; $output .= 'var $mm_ddReadonly;'; //Получаем id TV $tvs = tplUseTvs($mm_current_page['template'], $fields); //Если что-то есть if (is_array($tvs) && count($tvs) > 0) { //Перебираем TV foreach ($tvs as $val) { //Вставляем значение перед оригиналом и сносим оригинал нафиг $output .= ' $mm_ddReadonly = $j("#tv' . $val['id'] . '"); $mm_ddReadonly.before($mm_ddReadonly.val()).hide(); '; } } if (count($fields) != count($tvs)) { //Перебираем поля foreach ($fields as $val) { //Если такое поле есть и это не TV if (isset($mm_fields[$val]) && $mm_fields[$val]['tv'] != 1) { $output .= ' $mm_ddReadonly = $j("' . $mm_fields[$val]['fieldtype'] . '[name=\\"' . $mm_fields[$val]['fieldname'] . '\\"]"); $mm_ddReadonly.before($mm_ddReadonly.val()).hide(); '; } } } $output .= "\n// ---------------- mm_ddReadonly :: End -------------"; $e->output($output . "\n"); } } } } } }
/** * includeJsCss * @version 1.3.1 (2013-12-10) * * @desc Generates the code needed to include an external script file. * * @param $source {string} - The URL of the external script or code (if $plaintext == true). @required * @param $output_type {'js'; 'html'} - Either js or html - depending on where the output is appearing. Default: 'js'. * @param $name {string} - Script name. Default: ''. * @param $version {string} - Script version. Default: ''. * @param $plaintext {boolean} - Is this plaintext? Default: false. * @param $type {''; 'js'; 'css'} - Type of source (required if $plaintext == true). Default: ''. * * @return {string} - Code. */ function includeJsCss($source, $output_type = 'js', $name = '', $version = '', $plaintext = false, $type = '') { global $modx, $mm_includedJsCss; $useThisVer = true; $result = ''; if ($plaintext) { if (empty($name) || empty($version) || empty($type)) { return $result; } $nameVersion = array('name' => $name, 'version' => $version, 'extension' => $type); } else { if (empty($name) || empty($version)) { $nameVersion = ddTools::parseFileNameVersion($source); } else { $temp = pathinfo($source); $nameVersion = array('name' => $name, 'version' => $version, 'extension' => !empty($type) ? $type : ($temp['extension'] ? $temp['extension'] : 'js')); } } //If this script is already included if (isset($mm_includedJsCss[$nameVersion['name']])) { //If old < new, use new, else — old $useThisVer = version_compare($mm_includedJsCss[$nameVersion['name']]['version'], $nameVersion['version'], '<'); } else { //Add $mm_includedJsCss[$nameVersion['name']] = array(); } //If the new version is used if ($useThisVer) { //Save the new version $mm_includedJsCss[$nameVersion['name']]['version'] = $nameVersion['version']; $result = $source; if ($nameVersion['extension'] == 'css') { if ($plaintext) { $result = '<style type="text/css">' . $result . '</sty\'+\'le>'; } else { $result = '<link href="' . $result . '" rel="stylesheet" type="text/css" />'; } } else { if ($plaintext) { $result = '<script type="text/javascript" charset="' . $modx->config['modx_charset'] . '">' . $result . '</script>'; } else { $result = '<script src="' . $result . '" type="text/javascript"></script>'; } if ($output_type == 'js') { $result = str_replace('</script>', '</scr\'+\'ipt>', $result); } } if ($output_type == 'js') { $result = '$j("head").append(\'' . $result . '\');'; } $result = $result . "\n"; } return $result; }
/** * mm_ddAutoFolders * @version 1.2 (2014-04-18) * * @desc Automatically move documents (OnBeforeDocFormSave event) based on their date (publication date; any date in tv) into folders of year and month (like 2012/02/). If folders (documents) of year and month doesn`t exist they are created automatically OnBeforeDocFormSave event. * * @uses ManagerManager plugin 0.5 * * @param $roles {comma separated string} - List of role IDs this should be applied to. Leave empty (or omit) for all roles. Default: ''. * @param $templates {comma separated string} - List of template IDs this should be applied to. Leave empty (or omit) for all templates. Default: ''. * @param $yearsParents {comma separated string} - IDs of ultimate parents (parents of the years). @required * @param $dateSource {string} - Name of template variable which contains the date. Default: 'pub_date'. * @param $yearFields {string: JSON} - Document fields and/or TVs that are required to be assigned to year documents. An associative array in JSON where the keys and values correspond field names and values respectively. Default: '{"template":0,"published":0}'. * @param $monthFields {string: JSON} - Document fields and/or TVs that are required to be assigned to month documents. An associative array in JSON where the keys and values correspond field names and values respectively. Default: '{"template":0,"published":0}'. * @param $yearPublished {0; 1} - Note this is a deprecated parameter, please, use “$yearFields”. Whether the year documents should be published? Default: —. * @param $monthPublished {0; 1} - Note this is a deprecated parameter, please, use “$monthFields”. Whether the month documents should be published? Default: —. * @param $numericMonth {boolean} - Numeric aliases for month documents. Default: false. * * @link http://code.divandesign.biz/modx/mm_ddautofolders/1.2 * * @copyright 2014, DivanDesign * http://www.DivanDesign.biz */ function mm_ddAutoFolders($roles = '', $templates = '', $yearsParents = '', $dateSource = 'pub_date', $yearFields = '{"template":0,"published":0}', $monthFields = '{"template":0,"published":0}', $yearPublished = NULL, $monthPublished = NULL, $numericMonth = false) { global $modx, $pub_date, $parent, $mm_current_page, $tmplvars, $modx_lang_attribute; $e =& $modx->Event; //$yearsParents is required if ($yearsParents != '' && $e->name == 'OnBeforeDocFormSave' && useThisRule($roles, $templates)) { $defaultFields = array('template' => 0, 'published' => 0); //Функция аналогична методу «$modx->getParentIds» за исключением того, что родитель = 0 тоже выставляется function getParentIds($id) { global $modx; $parents = $modx->getParentIds($id); //Если текущего id нет в массиве, значит его родитель = 0 if (!isset($parents[$id])) { $parents[$id] = 0; //Если текущий документ есть, а его родителя нет, значит родитель родителя = 0 } else { if (!isset($parents[$parents[$id]])) { $parents[$parents[$id]] = 0; } } return $parents; } //Получаем всех родителей текущего документа (или его родителя, если это новый документ) $allParents = getParentIds(is_numeric($e->params['id']) ? $e->params['id'] : $parent); $yearsParents = makeArray($yearsParents); //Перебираем переданных родителей foreach ($yearsParents as $key => $val) { //Если текущий документ не принадлежит к переданному родителю, значит этот родитель лишний if (!isset($allParents[$val])) { unset($yearsParents[$key]); } } //Если остался хоть один родитель (а остаться должен только один) if (count($yearsParents) > 0) { //Сбрасываем ключи $yearsParents = array_values($yearsParents); //Если документ не относится ни к одному переданному родителю, то ничего делать не нужно } else { return; } //Текущее правило $rule = array(); //Дата $ddDate = array(); //Если задано, откуда брать дату и это не дата публикации, пытаемся найти в tv`шках if ($dateSource && $dateSource != 'pub_date') { //Получаем tv с датой для данного шаблона $dateTv = tplUseTvs($mm_current_page['template'], $dateSource); //Если tv удалось получить, такая tv есть и есть её значение if ($dateTv && $dateTv[0]['id'] && $tmplvars[$dateTv[0]['id']] && $tmplvars[$dateTv[0]['id']][1]) { //Если дата в юникс-времени if (is_numeric($tmplvars[$dateTv[0]['id']][1])) { $ddDate['date'] = $tmplvars[$dateTv[0]['id']][1]; } else { //Пытаемся преобразовать в unix-время $ddDate['date'] = strtotime($tmplvars[$dateTv[0]['id']][1]); } } } else { $ddDate['date'] = $pub_date; } //Если не задана дата, выбрасываем if (!$ddDate['date']) { return; } //Псевдонимы родителей (какие должны быть) //Год в формате 4 цифры $ddDate['y'] = date('Y', $ddDate['date']); //Псевдоним месяца (порядковый номер номер с ведущим нолём или название на английском) $ddDate['m'] = $numericMonth ? date('m', $ddDate['date']) : strtolower(date('F', $ddDate['date'])); //Порядковый номер месяца $ddDate['n'] = date('n', $ddDate['date']); //Если язык админки — русский if (strtolower($modx_lang_attribute) == 'ru') { //Все месяцы на русском $ruMonthes = array('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'); //Название месяца на русском $ddDate['mTitle'] = $ruMonthes[$ddDate['n'] - 1]; } else { //Просто запишем на английском $ddDate['mTitle'] = date('F', $ddDate['date']); } //Получаем список групп документов родителя (пригодится при создании годов и месяцев) $docGroups = $modx->db->getColumn('document_group', $modx->db->select('`document_group`', ddTools::$tables['document_groups'], '`document` = ' . $yearsParents[0])); $yearId = 0; $monthId = 0; //Получаем годы (непосредственных детей корневого родителя) $years = ddTools::getDocumentChildrenTVarOutput($yearsParents[0], array('id'), false, 'menuindex', 'ASC', '', 'alias'); if (isset($years[$ddDate['y']])) { //Получаем id нужного нам года $yearId = $years[$ddDate['y']]['id']; } //For backward compatibility if (is_numeric($yearFields)) { $yearFields = '{"template":' . $yearFields . ',"published":0}'; } if (is_numeric($monthFields)) { $monthFields = '{"template":' . $monthFields . ',"published":0}'; } $yearFields = json_decode($yearFields, true); $monthFields = json_decode($monthFields, true); if (!is_array($yearFields)) { $yearFields = $defaultFields; } if (!is_array($monthFields)) { $monthFields = $defaultFields; } //For backward compatibility too if ($yearPublished !== NULL) { $yearFields['published'] = $yearPublished; } if ($monthPublished !== NULL) { $monthFields['published'] = $monthPublished; } //Если нужный год существует if ($yearId != 0) { //Проставим году нужные параметры ddTools::updateDocument($yearId, array_merge($yearFields, array('isfolder' => 1))); //Получаем месяцы (непосредственных детей текущего года) $months = ddTools::getDocumentChildrenTVarOutput($yearId, array('id'), false, 'menuindex', 'ASC', '', 'alias'); if (isset($months[$ddDate['m']])) { //Получаем id нужного нам месяца $monthId = $months[$ddDate['m']]['id']; } //Если нужный год не существует } else { //Создадим его $yearId = ddTools::createDocument(array_merge($yearFields, array('pagetitle' => $ddDate['y'], 'alias' => $ddDate['y'], 'parent' => $yearsParents[0], 'isfolder' => 1, 'menuindex' => $ddDate['y'] - 2000)), $docGroups); } //Если нужный месяц существует if ($monthId != 0) { //Проставим месяцу нужные параметры ddTools::updateDocument($monthId, array_merge($monthFields, array('isfolder' => 1))); //Если нужный месяц не существует (на всякий случай проверим ещё и год) } else { if ($yearId) { $monthId = ddTools::createDocument(array_merge($monthFields, array('pagetitle' => $ddDate['mTitle'], 'alias' => $ddDate['m'], 'parent' => $yearId, 'isfolder' => 1, 'menuindex' => $ddDate['n'] - 1)), $docGroups); } } //Ещё раз на всякий случай проверим, что с месяцем всё хорошо if ($monthId && $monthId != $parent) { $parent = $monthId; } } }
* @param $scrollZoom {0; 1} - Allow zoom while scrolling. Default: 0. * @param $mapCenterOffset {comma separated string} - Center offset of the map with respect to the center of the map container in pixels. Default: '0,0'. * @param $lang {'ru_RU'; 'en_US'; 'ru_UA'; 'uk_UA'; 'tr_TR'} - Map language — locale ID. See http://api.yandex.com/maps/doc/jsapi/2.x/dg/concepts/load.xml for more information. Default: 'ru_RU'. * * @link http://code.divandesign.biz/modx/ddymap/1.5 * * @copyright 2015, DivanDesign * http://www.DivanDesign.biz */ //Подключаем modx.ddTools require_once $modx->getConfig('base_path') . 'assets/snippets/ddTools/modx.ddtools.class.php'; //Для обратной совместимости extract(ddTools::verifyRenamedParams($params, array('docField' => 'getField', 'docId' => 'getId'))); //Если задано имя поля, которое необходимо получить if (isset($docField)) { $geoPos = ddTools::getTemplateVarOutput(array($docField), $docId); $geoPos = $geoPos[$docField]; } //Если координаты заданы и не пустые if (!empty($geoPos)) { if (empty($lang)) { $lang = 'ru_RU'; } if (empty($mapElement)) { $mapElement = '#map'; } //Подключаем библиотеку карт $modx->regClientStartupScript('http://api-maps.yandex.ru/2.1/?lang=' . $lang, array('name' => 'api-maps.yandex.ru', 'version' => '2.1')); //Подключаем $.ddYMap $modx->regClientStartupScript($modx->getConfig('site_url') . 'assets/js/jquery.ddYMap-1.3.1.min.js', array('name' => '$.ddYMap', 'version' => '1.3.1')); //Инлайн-скрипт инициализации
include_once $richtextIncludeDirectory . 'assets/cache/siteManager.php'; } if (!defined('MGR_DIR')) { define('MGR_DIR', 'manager'); } $richtextIncludeDirectory .= MGR_DIR . '/'; //Config $_SERVER['PHP_SELF'] = $_SERVER['SCRIPT_NAME'] = '/'; require_once $richtextIncludeDirectory . 'includes/protect.inc.php'; require_once $richtextIncludeDirectory . 'includes/config.inc.php'; startCMSSession(); if ($_SESSION['mgrValidated']) { define('IN_MANAGER_MODE', true); //Setup the MODx API define('MODX_API_MODE', true); //Initiate a new document parser require_once $richtextIncludeDirectory . 'includes/document.parser.class.inc.php'; $modx = new DocumentParser(); //Provide the MODx DBAPI $modx->db->connect(); //Provide the $modx->documentMap and user settings $modx->getSettings(); $mmDir = 'assets/plugins/managermanager/'; $windowDir = $mmDir . 'widgets/ddmultiplefields/richtext/'; //Include the ddTools library require_once $modx->config['base_path'] . $mmDir . 'modx.ddtools.class.php'; $temp = $modx->invokeEvent('OnRichTextEditorInit', array('editor' => 'TinyMCE', 'elements' => array('ddMultipleFields_richtext'))); echo ddTools::parseText(file_get_contents($modx->config['base_path'] . $windowDir . 'template.html'), array('site_url' => $modx->config['site_url'], 'mmDir' => $mmDir, 'windowDir' => $windowDir, 'charset' => '<meta charset="' . $modx->config['modx_charset'] . '" />', 'style' => MODX_MANAGER_URL . 'media/style/' . $modx->config['manager_theme'] . '/style.css', 'tinyMCE' => $temp[0]), '[+', '+]', false); } else { echo file_get_contents(dirname(__FILE__) . '/index.html'); }
} } //Если оборачивающий шаблон задан (и вывод не в массив), парсим его if (isset($outerTpl)) { $resTemp = array(); //Элемент массива 'result' должен находиться самым первым, иначе дополнительные переданные плэйсхолдеры в тексте не найдутся! $resTemp['result'] = $result; //Преобразуем результат в одномерный массив $data = ddTools::unfoldArray($data); //Добавляем 'row' и 'val' к ключам foreach ($data as $rowNumber => $row) { $resTemp[preg_replace('/(\\d)\\.(\\d)/', 'row$1.col$2', $rowNumber)] = $row; } //Если есть дополнительные данные if (isset($placeholders)) { $resTemp = array_merge($resTemp, ddTools::explodeAssoc($placeholders)); } $resTemp['total'] = $total; $resTemp['resultTotal'] = $resultTotal; $result = $modx->parseChunk($outerTpl, $resTemp, '[+', '+]'); } //Если нужно URL-кодировать строку if ($urlencode) { $result = rawurlencode($result); } } } //Если надо, выводим в плэйсхолдер if (isset($resultToPlaceholder)) { $modx->setPlaceholder($resultToPlaceholder, $result); } else {