diff --git a/fields/doc_from_rub_check/field.php b/fields/doc_from_rub_check/field.php index 63bcc31..6ba684a 100644 --- a/fields/doc_from_rub_check/field.php +++ b/fields/doc_from_rub_check/field.php @@ -4,7 +4,7 @@ * AVE.cms * * @package AVE.cms - * @version 3.x + * @version 4.x * @filesource * @copyright © 2007-2015 AVE.cms, http://www.ave-cms.ru * @@ -31,7 +31,6 @@ switch ($action) { case 'edit': - if (!empty($default)) { $parent = $AVE_DB->Query(" @@ -72,94 +71,78 @@ } else { - // Этот блок выполняется, если $default пуст. $AVE_Template->assign('error', $AVE_Template->get_config_vars('error')); } $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); - $AVE_Template->assign('subtpl', $tpl_dir."list.tpl"); return $AVE_Template->fetch($tpl_file); break; case 'doc': - $field_value_array = explode('|', $field_value); - $field_value_array = array_values(array_diff($field_value_array, array(''))); - - if ($field_value_array != false) - { - foreach ($field_value_array as $list_item) - { - if ($list_item) - { - if ($tpl_empty) - { - $list_item = $AVE_DB->Query(" - SELECT - Id, - document_title, - document_alias, - document_breadcrum_title - FROM - ".PREFIX."_documents - WHERE - Id = '" . $list_item . "' - ")->FetchAssocArray(); - } - } - $res[] = $list_item; - } - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); - - if ($tpl_empty && $tpl_file) - { - - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $res); - $AVE_Template->assign('field_count', count($res)); - $AVE_Template->assign('default', $default); - - return $AVE_Template->fetch($tpl_file); - } - - return (!empty($res)) ? implode(PHP_EOL, $res) : $tpl; - break; - case 'req': $field_value_array = explode('|', $field_value); $field_value_array = array_values(array_diff($field_value_array, array(''))); - if ($field_value_array != false) + if (!empty($field_value_array)) { foreach ($field_value_array as $list_item) { if ($list_item) { - if ($tpl_empty) + // Получаем расширенные данные документа + $sql_doc = $AVE_DB->Query(" + SELECT + Id, + document_title, + document_alias, + document_breadcrum_title + FROM + ".PREFIX."_documents + WHERE + Id = '" . (int)$list_item . "' + LIMIT 1 + "); + $doc_row = $sql_doc->FetchRow(); + + if ($doc_row) { - $list_item = $AVE_DB->Query(" - SELECT - Id, - document_title, - document_alias, - document_breadcrum_title - FROM - ".PREFIX."_documents - WHERE - Id = '" . $list_item . "' - ")->FetchAssocArray(); + // Индексированный массив для тегов [tag:parametr:X] + $doc_data_indexed = array( + $doc_row->Id, + $doc_row->document_title, + $doc_row->document_alias, + $doc_row->document_breadcrum_title + ); + + if (!$tpl_empty && !empty($tpl)) + { + // Режим текстового оформления из админки + $current_tpl = $tpl; + foreach ($doc_data_indexed as $idx => $val) { + $current_tpl = str_ireplace('[tag:parametr:' . $idx . ']', $val, $current_tpl); + } + $res[] = $current_tpl; + } + else + { + // Режим работы через .tpl файл (Smarty) + $res[] = array( + 'Id' => $doc_row->Id, + 'document_title' => $doc_row->document_title, + 'document_alias' => $doc_row->document_alias, + 'document_breadcrum_title' => $doc_row->document_breadcrum_title + ); + } } } - $res[] = $list_item; } } - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl); + $tpl_file = get_field_tpl($tpl_dir, $field_id, $action, $_tpl); - if ($tpl_empty && $tpl_file) + if ($tpl_empty && $tpl_file && !empty($res)) { $AVE_Template->assign('field_id', $field_id); $AVE_Template->assign('field_value', $res); @@ -179,7 +162,6 @@ case 'name' : return $AVE_Template->get_config_vars('name'); break; - } return ($res ? $res : $field_value); diff --git a/fields/doc_from_rub_list/field.php b/fields/doc_from_rub_list/field.php index 3a40673..d274b34 100644 --- a/fields/doc_from_rub_list/field.php +++ b/fields/doc_from_rub_list/field.php @@ -4,14 +4,14 @@ * AVE.cms * * @package AVE.cms - * @version 3.x + * @version 4.x * @filesource * @copyright © 2007-2015 AVE.cms, http://www.ave-cms.ru * * @license GPL v.2 */ - // Документ из рубрики + // Документ из рубрики (Список/Select) function get_field_doc_from_rub_list($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null) { global $AVE_DB, $AVE_Template; @@ -25,12 +25,11 @@ $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); $AVE_Template->config_load($lang_file, 'admin'); - $res = 0; + $res = array(); switch ($action) { case 'edit': - if (!empty($default)) { $sql = $AVE_DB->Query(" @@ -41,13 +40,13 @@ WHERE rubric_id IN (" . $default . ") ORDER BY - document_title DESC + document_title ASC "); - $cats = []; - - while ($cat = $sql->FetchAssocArray()) - array_push($cats, $cat); + $cats = array(); + while ($cat = $sql->FetchAssocArray()) { + $cats[] = $cat; + } $AVE_Template->assign('fields', $cats); $AVE_Template->assign('field_id', $field_id); @@ -56,87 +55,64 @@ } else { - // Если $default пуст, выводим ошибку, а не выполняем SQL $AVE_Template->assign('error', $AVE_Template->get_config_vars('error')); } $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); - return $AVE_Template->fetch($tpl_file); break; case 'doc': - $document = get_document($field_value); - - if ($tpl_empty) - { - $field_value = isset($document['document_title']) ? $document['document_title'] : ''; - $field_value = clean_php($field_value); - $field_value = stripcslashes($field_value); - $field_value = htmlspecialchars_decode($field_value); - } - else - { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); - $AVE_Template->assign('document', $document); - - return $AVE_Template->fetch($tpl_file); - } - - $res = $field_value; - break; - case 'req': - $document = get_document($field_value); + // Получаем данные документа + $sql_doc = $AVE_DB->Query(" + SELECT Id, document_title, document_alias, document_breadcrum_title + FROM ".PREFIX."_documents + WHERE Id = '" . (int)$field_value . "' + LIMIT 1 + "); + $doc_row = $sql_doc->FetchRow(); - if ($tpl_empty) + if ($doc_row) { - $field_value = $document['document_title']; - $field_value = clean_php($field_value); - $field_value = stripcslashes($field_value); - $field_value = htmlspecialchars_decode($field_value); - } - else + // Готовим данные для тегов + $doc_data_indexed = array( + $doc_row->Id, + $doc_row->document_title, + $doc_row->document_alias, + $doc_row->document_breadcrum_title + ); + + if (!$tpl_empty && !empty($tpl)) { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); + // (Оформление поля) + $field_value = $tpl; + foreach ($doc_data_indexed as $idx => $val) { + $field_value = str_ireplace('[tag:parametr:' . $idx . ']', $val, $field_value); + } + } + elseif ($tpl_empty) + { + // Если оформления нет, отдаем чистый заголовок (как и было) + $field_value = htmlspecialchars_decode(stripcslashes($doc_row->document_title)); } - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl); + $tpl_file = get_field_tpl($tpl_dir, $field_id, $action, $_tpl); - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); - $AVE_Template->assign('document', $document); - - return $AVE_Template->fetch($tpl_file); + if ($tpl_empty && $tpl_file) + { + // Работаем с .tpl файл + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $field_value); + $AVE_Template->assign('document', (array)$doc_row); + return $AVE_Template->fetch($tpl_file); + } + } + else { + $field_value = ''; } - $res = $field_value; + return $field_value; break; case 'api': @@ -147,6 +123,6 @@ return $AVE_Template->get_config_vars('name'); break; } - return ($res ? $res : $field_value); + return $field_value; } ?> \ No newline at end of file diff --git a/fields/doc_from_rub_search/field.php b/fields/doc_from_rub_search/field.php index 3f13dc3..2b98cf9 100644 --- a/fields/doc_from_rub_search/field.php +++ b/fields/doc_from_rub_search/field.php @@ -1,259 +1,190 @@ config_load($lang_file, 'lang'); - $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); - $AVE_Template->config_load($lang_file, 'admin'); + $AVE_Template->config_load($lang_file, 'lang'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + $AVE_Template->config_load($lang_file, 'admin'); - $res = array(); + $res = array(); - switch ($action) - { - case 'edit': + switch ($action) + { + case 'edit': + $items = array(); + if ($field_value != '' && $field_value != $default) + { + $items = explode('|', $field_value); + $items = array_values(array_diff($items, array(''))); + } - $items = array(); - - if ($field_value != '' && $field_value != $default) - { - $items = explode('|', $field_value); - $items = array_values(array_diff($items, array(''))); - } - - if (! empty($items)) - { - foreach($items as $k => $v) - { - $list[$k]['param'] = htmlspecialchars(get_document($v, 'document_title'), ENT_QUOTES); - $list[$k]['value'] = $v; - } - - $items = $list; - } - else - { - $items[0]['param'] = ''; - $items[0]['value'] = ''; - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); - - $AVE_Template->assign('doc_id', isset($_REQUEST['Id']) ? (int)$_REQUEST['Id'] : 0); - $AVE_Template->assign('items', $items); - $AVE_Template->assign('field_dir', $fld_name); - $AVE_Template->assign('field_id', $field_id); - - return $AVE_Template->fetch($tpl_file); - - case 'save': - foreach ($field_value as $v) - { - if (! empty($v['value'])) - { - $field_value_new[] = $v['value']; - } - } - - if (isset($field_value_new)) - { - return '|' . implode('|', $field_value_new) . '|'; - } - else - { - return $field_value_new = ''; - } - break; - - case 'doc': - $field_value_array = explode('|', $field_value); - $field_value_array = array_values(array_diff($field_value_array, array(''))); - - if ($field_value_array != false) - { - foreach ($field_value_array as $list_item) - { - if ($list_item) - { - if ($tpl_empty) - { - $list_item = $AVE_DB->Query(" - SELECT - Id, - document_title, - document_alias, - document_breadcrum_title - FROM - ".PREFIX."_documents - WHERE - Id = '" . $list_item . "' - ")->FetchAssocArray(); - } - } - $res[] = $list_item; - } - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $res); - $AVE_Template->assign('field_count', count($res)); - $AVE_Template->assign('default', $default); - - return $AVE_Template->fetch($tpl_file); - } - - return (! empty($res)) ? implode(PHP_EOL, $res) : $tpl; - break; - - case 'req': - $field_value_array = explode('|', $field_value); - $field_value_array = array_values(array_diff($field_value_array, array(''))); - - if ($field_value_array != false) - { - foreach ($field_value_array as $list_item) - { - if ($list_item) - { - if ($tpl_empty) - { - $list_item = $AVE_DB->Query(" - SELECT - Id, - document_title, - document_alias, - document_breadcrum_title - FROM - ".PREFIX."_documents - WHERE - Id = '" . $list_item . "' - ")->FetchAssocArray(); - } - } - $res[] = $list_item; - } - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $res); - $AVE_Template->assign('field_count', count($res)); - $AVE_Template->assign('default', $default); - - return $AVE_Template->fetch($tpl_file); - } - - return (! empty($res)) ? implode(PHP_EOL, $res) : $tpl; - break; - - case 'api' : - $items = []; - - if ($field_value != '' && $field_value != $default) - { - $items = explode('|', $field_value); - $items = array_values(array_diff($items, array(''))); - } - - if (! empty($items)) - { - foreach($items as $k => $v) - { - $list[$k]['param'] = htmlspecialchars_decode(get_document($v, 'document_title'), ENT_QUOTES); - $list[$k]['value'] = $v; - } - - $items = $list; - } - else - { - $items[0]['param'] = ''; - $items[0]['value'] = ''; - } - - return $items; - break; - - case 'name' : - return $AVE_Template->get_config_vars('name'); - break; - - case 'search': - $default = get_field_default_value($_REQUEST['field_id']); - - // Проверяем, что ID рубрик существуют. - // Если $default пуст, выходим, чтобы не создавать невалидный запрос. - if (empty($default)) { - echo json_encode(array()); - exit; + if (!empty($items)) + { + foreach($items as $k => $v) + { + $list[$k]['param'] = htmlspecialchars(get_document($v, 'document_title'), ENT_QUOTES); + $list[$k]['value'] = $v; } + $items = $list; + } + else + { + $items[0]['param'] = ''; + $items[0]['value'] = ''; + } - $sql = $AVE_DB->Query(" - SELECT - doc.Id, - doc.document_title, - rub.rubric_title - FROM - " . PREFIX . "_documents AS doc - JOIN - " . PREFIX . "_rubrics AS rub - ON doc.rubric_id = rub.Id - WHERE - doc.rubric_id IN (" . $default . ") - AND - doc.document_status = 1 - AND - UPPER (doc.document_title) LIKE UPPER('%" . $_REQUEST['q'] . "%') - GROUP BY - doc.Id - LIMIT - 0,5 - "); + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); + $AVE_Template->assign('doc_id', isset($_REQUEST['Id']) ? (int)$_REQUEST['Id'] : 0); + $AVE_Template->assign('items', $items); + $AVE_Template->assign('field_dir', $fld_name); + $AVE_Template->assign('field_id', $field_id); - $doc_finded = array(); + return $AVE_Template->fetch($tpl_file); - while ($row = $sql->FetchRow()) - { - $doc_finded[] = array( - 'doc_id' => $row->Id, - 'doc_title' => $row->document_title, - 'doc_rubric' => $row->rubric_title - ); - } + case 'save': + $field_value_new = array(); + if (is_array($field_value)) { + foreach ($field_value as $v) { + if (!empty($v['value'])) $field_value_new[] = $v['value']; + } + } - echo json_encode($doc_finded); - exit; + if (!empty($field_value_new)) { + return '|' . implode('|', $field_value_new) . '|'; + } else { + return ''; + } + break; - default: - return $field_value; - } + case 'doc': + case 'req': + $field_value_array = explode('|', $field_value); + $field_value_array = array_values(array_diff($field_value_array, array(''))); - return ($res ? $res : $field_value); - } + if (!empty($field_value_array)) + { + foreach ($field_value_array as $list_item) + { + if ($list_item) + { + $sql_doc = $AVE_DB->Query(" + SELECT Id, document_title, document_alias, document_breadcrum_title + FROM ".PREFIX."_documents + WHERE Id = '" . (int)$list_item . "' + LIMIT 1 + "); + $doc_row = $sql_doc->FetchRow(); + + if ($doc_row) + { + // Формируем массив для замены тегов [tag:parametr:X] + $doc_data_indexed = array( + $doc_row->Id, + $doc_row->document_title, + $doc_row->document_alias, + $doc_row->document_breadcrum_title + ); + + if (!$tpl_empty && !empty($tpl)) + { + // Режим оформления через админку + $current_tpl = $tpl; + foreach ($doc_data_indexed as $idx => $val) { + $current_tpl = str_ireplace('[tag:parametr:' . $idx . ']', $val, $current_tpl); + } + $res[] = $current_tpl; + } + else + { + // Режим шаблона .tpl + $res[] = array( + 'Id' => $doc_row->Id, + 'document_title' => $doc_row->document_title, + 'document_alias' => $doc_row->document_alias, + 'document_breadcrum_title' => $doc_row->document_breadcrum_title + ); + } + } + } + } + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, $action, $_tpl); + + if ($tpl_empty && $tpl_file && !empty($res)) + { + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $res); + $AVE_Template->assign('field_count', count($res)); + $AVE_Template->assign('default', $default); + + return $AVE_Template->fetch($tpl_file); + } + + return (!empty($res)) ? implode(PHP_EOL, $res) : $tpl; + break; + + case 'api' : + $items = array(); + if ($field_value != '' && $field_value != $default) { + $items = explode('|', $field_value); + $items = array_values(array_diff($items, array(''))); + } + if (!empty($items)) { + foreach($items as $k => $v) { + $list[$k]['param'] = htmlspecialchars_decode(get_document($v, 'document_title'), ENT_QUOTES); + $list[$k]['value'] = $v; + } + $items = $list; + } + return $items; + + case 'name' : + return $AVE_Template->get_config_vars('name'); + + case 'search': + $default = get_field_default_value($_REQUEST['field_id']); + if (empty($default)) { echo json_encode(array()); exit; } + + $sql = $AVE_DB->Query(" + SELECT doc.Id, doc.document_title, rub.rubric_title + FROM " . PREFIX . "_documents AS doc + JOIN " . PREFIX . "_rubrics AS rub ON doc.rubric_id = rub.Id + WHERE doc.rubric_id IN (" . $default . ") + AND doc.document_status = 1 + AND UPPER (doc.document_title) LIKE UPPER('%" . $_REQUEST['q'] . "%') + GROUP BY doc.Id LIMIT 0,5 + "); + + $doc_finded = array(); + while ($row = $sql->FetchRow()) { + $doc_finded[] = array('doc_id' => $row->Id, 'doc_title' => $row->document_title, 'doc_rubric' => $row->rubric_title); + } + echo json_encode($doc_finded); + exit; + + default: + return $field_value; + } +} ?> \ No newline at end of file diff --git a/fields/doc_from_rub_tree/field.php b/fields/doc_from_rub_tree/field.php index d084c77..448b339 100644 --- a/fields/doc_from_rub_tree/field.php +++ b/fields/doc_from_rub_tree/field.php @@ -11,7 +11,7 @@ * @license GPL v.2 */ - // Документ из рубрики + // Документ из рубрики (Дерево) function get_field_doc_from_rub_tree($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null) { global $AVE_DB, $AVE_Template; @@ -25,15 +25,13 @@ $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); $AVE_Template->config_load($lang_file, 'admin'); - $res = 0; + $res = array(); switch ($action) { -case 'edit': - // !!! ИСПРАВЛЕНИЕ: Проверяем, что $default НЕ ПУСТ (isset и !empty) + case 'edit': if (!empty($default)) { - // SQL-запрос 1: Получение минимального родителя $parent = $AVE_DB->Query(" SELECT MIN(document_parent) AS min @@ -43,7 +41,6 @@ case 'edit': rubric_id IN (" . $default . ") ")->GetCell(); - // SQL-запрос 2: Получение списка документов $sql = $AVE_DB->Query(" SELECT Id, document_parent, document_title @@ -54,10 +51,8 @@ case 'edit': "); $cats = array(); - while ($cat = $sql->FetchAssocArray()) { - $cats_ID[$cat['Id']][] = $cat; $cats[$cat['document_parent']][$cat['Id']] = $cat; } @@ -69,87 +64,64 @@ case 'edit': } else { - // Если $default пуст, мы выводим ошибку, как и в оригинальном коде $AVE_Template->assign('error', $AVE_Template->get_config_vars('error')); } $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); - return $AVE_Template->fetch($tpl_file); break; case 'doc': - $document = get_document($field_value); - - if ($tpl_empty) - { - $field_value = isset($document['document_title']) ? $document['document_title'] : ''; - $field_value = clean_php($field_value); - $field_value = stripcslashes($field_value); - $field_value = htmlspecialchars_decode($field_value); - } - else - { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); - } - - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc', $_tpl); - - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); - $AVE_Template->assign('document', $document); - - return $AVE_Template->fetch($tpl_file); - } - - $res = $field_value; - break; - case 'req': - $document = get_document($field_value); + // Получаем основные данные документа по ID + $sql_doc = $AVE_DB->Query(" + SELECT Id, document_title, document_alias, document_breadcrum_title + FROM ".PREFIX."_documents + WHERE Id = '" . (int)$field_value . "' + LIMIT 1 + "); + $doc_row = $sql_doc->FetchRow(); - if ($tpl_empty) + if ($doc_row) { - $field_value = $document['document_title']; - $field_value = clean_php($field_value); - $field_value = stripcslashes($field_value); - $field_value = htmlspecialchars_decode($field_value); - } - else + // Индексированный массив для тегов [tag:parametr:X] + $doc_data_indexed = array( + $doc_row->Id, + $doc_row->document_title, + $doc_row->document_alias, + $doc_row->document_breadcrum_title + ); + + if (!$tpl_empty && !empty($tpl)) { - $field_param = explode('|', $field_value); - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($field_param) - { - return $field_param[(int)$data[1]]; - }, - $tpl - ); + // Обработка текстового оформления (Screenshot 2) + $field_value = $tpl; + foreach ($doc_data_indexed as $idx => $val) { + $field_value = str_ireplace('[tag:parametr:' . $idx . ']', $val, $field_value); + } + } + elseif ($tpl_empty) + { + // Стандартный вывод заголовка, если шаблон пуст + $field_value = htmlspecialchars_decode(stripcslashes($doc_row->document_title)); } - $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req', $_tpl); + $tpl_file = get_field_tpl($tpl_dir, $field_id, $action, $_tpl); - if ($tpl_empty && $tpl_file) - { - $AVE_Template->assign('field_id', $field_id); - $AVE_Template->assign('field_value', $field_value); - $AVE_Template->assign('document', $document); - - return $AVE_Template->fetch($tpl_file); + if ($tpl_empty && $tpl_file) + { + // Для работы через .tpl (Smarty) + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('field_value', $field_value); + $AVE_Template->assign('document', (array)$doc_row); + return $AVE_Template->fetch($tpl_file); + } + } + else { + $field_value = ''; } - $res = $field_value; + return $field_value; break; case 'api': @@ -160,14 +132,14 @@ case 'edit': return $AVE_Template->get_config_vars('name'); break; } - return ($res ? $res : $field_value); + return $field_value; } - if (! function_exists('doc_from_rub_tree')) { function doc_from_rub_tree($cats, $parent) { + $array = array(); if (is_array($cats) and isset($cats[$parent])) { foreach($cats[$parent] as $cat) @@ -178,10 +150,9 @@ case 'edit': } } else - { - return null; - } - + { + return null; + } return $array; } } diff --git a/fields/doc_link/field.php b/fields/doc_link/field.php index a7b9301..66b6a71 100644 --- a/fields/doc_link/field.php +++ b/fields/doc_link/field.php @@ -4,9 +4,9 @@ * AVE.cms - Поле "Ссылка на документ" * * @package AVE.cms - * @version 3.x + * @version 4.x * @filesource - * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * @copyright © 2007-2015 AVE.cms, http://www.ave-cms.ru * * @license GPL v.2 */ @@ -29,7 +29,6 @@ switch ($action) { case 'edit': - $field_value = clean_php($field_value); $field_param = explode('|', $field_value); @@ -38,7 +37,7 @@ $clean_field_value .= '|' . $field_param[1]; } - $doc_id = 0; + $doc_id = 0; $document_name_to_display = ''; if (preg_match('/id=([0-9]+)/i', $clean_field_value, $matches)) { @@ -53,98 +52,85 @@ $document_name_to_display = 'Главная страница'; } } - - $AVE_Template->assign('display_value', $document_name_to_display); + + $AVE_Template->assign('display_value', $document_name_to_display); $AVE_Template->assign('field_id', $field_id); $AVE_Template->assign('field_value', $clean_field_value); $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin', $_tpl); - return $AVE_Template->fetch($tpl_file); break; - case 'doc': + case 'doc': case 'req': $field_value = clean_php($field_value); - $field_param = explode('|', $field_value); $doc_id = 0; - if (preg_match('/id=([0-9]+)/i', $field_param[0], $matches)) { $doc_id = (int)$matches[1]; } $url_href = ''; $anchor = ''; - $title = ''; $alias = ''; + $title = ''; + $bread = ''; $user_anchor = isset($field_param[1]) ? $field_param[1] : ''; if ($doc_id > 0) { $document_data = get_document($doc_id); - if ($document_data) { $alias = isset($document_data['document_alias']) ? $document_data['document_alias'] : ''; $title = isset($document_data['document_title']) ? $document_data['document_title'] : ''; + $bread = isset($document_data['document_breadcrum_title']) ? $document_data['document_breadcrum_title'] : ''; + // Формируем готовую ссылку (URL) if ($alias === '/') { $url_href = '/'; } else { - $url_href = '/' . trim($alias, '/'); if (defined('URL_SUFF') && URL_SUFF) { $url_href .= URL_SUFF; } } - if (!empty($user_anchor) && $user_anchor !== $field_param[0]) { - $anchor = $user_anchor; - } elseif (!empty($title)) { - $anchor = $title; - } elseif ($alias === '/') { - $anchor = 'Главная'; - } else { - $anchor = ''; - } + // Формируем Анкор (текст ссылки) + $anchor = !empty($user_anchor) ? $user_anchor : (!empty($title) ? $title : $url_href); } } - - if ($doc_id === 0) { + else + { + // Если внешняя ссылка $url_href = $field_param[0]; - $anchor = isset($field_param[1]) ? $field_param[1] : $field_param[0]; - - $url_href = str_replace('//', '/', $url_href); - $url_href = str_replace('https:/', 'https://', $url_href); - $url_href = str_replace('http:/', 'http://', $url_href); + $anchor = !empty($user_anchor) ? $user_anchor : $field_param[0]; + $url_href = str_replace(array('http:/', 'https:/'), array('http://', 'https://'), str_replace('//', '/', $url_href)); } - $action_is_req = ($action === 'req'); - $use_inline_tpl = ($action_is_req && isset($document_fields[$rubric_id]['tpl_req_empty'])) || (!$action_is_req && $tpl_empty); - - if ($use_inline_tpl) + if (!$tpl_empty && !empty($tpl)) { - $field_value = ' ' . $anchor . ''; + $res = $tpl; + // СТРОГОЕ СОБЛЮДЕНИЕ ОБЩЕГО СТАНДАРТА + ДОП. ПАРАМЕТРЫ + $doc_data_indexed = array( + $doc_id, // 0 - ID + $title, // 1 - Название + $alias, // 2 - Алиас + $bread, // 3 - Крошки + $url_href, // 4 - Готовый URL + $anchor // 5 - Текст ссылки (Анкор) + ); + foreach ($doc_data_indexed as $idx => $val) { + $res = str_ireplace('[tag:parametr:' . $idx . ']', $val, $res); + } } else { - $field_value = preg_replace_callback( - '/\[tag:parametr:(\d+)\]/i', - function($data) use($anchor, $url_href) - { - return $anchor; - }, - $tpl - ); + $res = '' . $anchor . ''; } - $maxlength = null; - $res = $field_value; - return $res; - break; case 'api' : @@ -154,7 +140,6 @@ case 'name' : return $AVE_Template->get_config_vars('name'); break; - } return ($res ? $res : $field_value); }