diff --git a/fields/multi_links/css/field.css b/fields/multi_links/css/field.css new file mode 100644 index 0000000..0a676da --- /dev/null +++ b/fields/multi_links/css/field.css @@ -0,0 +1,18 @@ +.multi_lists { + position: relative; +} + +.multi_lists > .ui-state-highlight { + display: inline-block; + margin: 3px; + width: 450px; + height: 26px; + background-color: rgba(255,255,255,0.5); !important; + border: solid 1px #eaeaea; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + position: relative; + text-align: center; + padding: 0 !important; +} \ No newline at end of file diff --git a/fields/multi_links/field.php b/fields/multi_links/field.php new file mode 100644 index 0000000..0f7158f --- /dev/null +++ b/fields/multi_links/field.php @@ -0,0 +1,194 @@ +config_load($lang_file, 'lang'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + $AVE_Template->config_load($lang_file, 'admin'); + + $res = array(); + + switch ($action) + { + case 'edit': + + $items = array(); + + $items = unserialize($field_value); + + if ($items != false) + { + + foreach($items as $k => $v){ + $list_item = explode('|', $v); + + $list[$k]['param'] = (isset($list_item[0])) ? htmlspecialchars($list_item[0], ENT_QUOTES) : ''; + $list[$k]['value'] = (isset($list_item[1])) ? htmlspecialchars($list_item[1], ENT_QUOTES) : ''; + } + + $items = $list; + } + else + { + $items = explode(',', $default); + + foreach($items as $k => $v){ + $list_item = explode('|', $v); + + $list[$k]['param'] = (isset($list_item[0])) ? htmlspecialchars($list_item[0], ENT_QUOTES) : ''; + $list[$k]['value'] = (isset($list_item[1])) ? htmlspecialchars($list_item[1], ENT_QUOTES) : ''; + } + $items = $list; + } + + $AVE_Template->assign('doc_id', $_REQUEST['Id']); + $AVE_Template->assign('field_dir', $fld_name); + $AVE_Template->assign('items', $items); + $AVE_Template->assign('field_id', $field_id); + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); + + return $AVE_Template->fetch($tpl_file); + break; + + case 'doc': + $items = unserialize($field_value); + + if ($items != false) + { + foreach($items as $list_item) + { + $list_item = clean_php($list_item); + $field_param = explode('|', $list_item); + + if ($list_item) + { + if ($tpl_empty) + { + $list_item = $field_param; + } + else + { + $list_item = preg_replace_callback( + '/\[tag:parametr:(\d+)\]/i', + function($data) use($field_param) + { + return $field_param[(int)$data[1]]; + }, + $tpl + ); + } + } + $res[] = $list_item; + } + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'doc'); + + 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': + $items = unserialize($field_value); + + if ($items != false) + { + foreach($items as $list_item) + { + $list_item = clean_php($list_item); + $field_param = explode('|', $list_item); + + if ($list_item) + { + if ($tpl_empty) + { + $list_item = $field_param; + } + else + { + $list_item = preg_replace_callback( + '/\[tag:parametr:(\d+)\]/i', + function($data) use($field_param) + { + return $field_param[(int)$data[1]]; + }, + $tpl + ); + } + } + $res[] = $list_item; + } + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'req'); + + 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 'save': + foreach ($field_value as $v) + { + if (! empty($v['param'])) + { + $field_value_new[] = $v['param'] . ($v['value'] ? '|' . $v['value'] : ''); + } + } + + if (isset($field_value_new)) + { + return @serialize($field_value_new); + } + else + { + return $field_value_new = ''; + } + break; + + case 'name': + return $AVE_Template->get_config_vars('name'); + break; + + } + return ($res ? $res : $field_value); +} +?> \ No newline at end of file diff --git a/fields/multi_links/js/field.js b/fields/multi_links/js/field.js new file mode 100644 index 0000000..050438c --- /dev/null +++ b/fields/multi_links/js/field.js @@ -0,0 +1,74 @@ +var MultiLinks = { + + init: false, + + init: function() { + if (this.initialized) return; + this.initialized = true; + + this.lists(); + }, + + lists: function() { + this.lists_sortable(); + this.lists_del_item(); + this.lists_add(); + }, + + lists_update: function() { + this.lists_maxid(); + this.lists_del_item(); + AveAdmin.tooltip(); + }, + + lists_maxid: function(id) { + var maxid = 1; + $('#multi_links_' + id).children('.multi_link').each(function() { + maxid = Math.max(maxid, parseInt($(this).attr("data-id")) + 1); + }); + return maxid; + }, + + lists_del_item: function() { + $('.multi_link .DelButton').on('click', function(event) { + event.preventDefault(); + var id = $(this).attr('data-id'); + jConfirm( + links_del_conf, + links_del_head, + function(b) { + if (b) { + $('#link_' + id).remove(); + } + } + ); + }); + }, + + lists_add: function() { + $('.multi_links .AddButton').on('click', function(event) { + event.preventDefault(); + c_id = $(this).parent().parent('.multi_links').attr("data-id"); + iid = MultiLinks.lists_maxid(c_id); + $('#multi_links_' + c_id + ':last').append( + '' + ); + + MultiLinks.lists_update(); + }); + }, + + lists_sortable: function() { + $('.multi_links').sortable({ + handle: ".handle", + placeholder: "ui-state-highlight grey_bg" + }); + } +} + +$(document).ready(function() { + MultiLinks.init(); +}); \ No newline at end of file diff --git a/fields/multi_links/js/outside.js b/fields/multi_links/js/outside.js new file mode 100644 index 0000000..e67fa2f --- /dev/null +++ b/fields/multi_links/js/outside.js @@ -0,0 +1,75 @@ +var MultiList = { + + init: false, + + init: function() { + if (this.initialized) return; + this.initialized = true; + + this.lists(); + }, + + lists: function() { + this.lists_sortable(); + this.lists_del_item(); + this.lists_add(); + }, + + lists_update: function() { + this.lists_maxid(); + this.lists_del_item(); + AveAdmin.tooltip(); + }, + + lists_maxid: function(id) { + var maxid = 1; + $('#multi_lists_' + id).children('.multi_list').each(function() { + maxid = Math.max(maxid, parseInt($(this).attr("data-id")) + 1); + }); + return maxid; + }, + + lists_del_item: function() { + $('.multi_list .DelButton').on('click', function(event) { + event.preventDefault(); + var id = $(this).attr('data-id'); + jConfirm( + list_del_conf, + list_del_head, + function(b) { + if (b) { + $('#list_' + id).remove(); + } + } + ); + }); + }, + + lists_add: function() { + $('.AddButton').on('click', function(event) { + event.preventDefault(); + c_id = $(this).parent().parent('.multi_lists').attr("data-id"); + iid = MultiList.lists_maxid(c_id); + $('#multi_lists_' + c_id + ':last').append( + '
' + + '    ×' + + '
' + + '
' + ); + + MultiList.lists_update(); + }); + }, + + lists_sortable: function() { + $('.multi_lists').sortable({ + handle: ".handle", + placeholder: "ui-state-highlight grey_bg" + }); + //$(".multi_lists").disableSelection(); + } +} + +$(document).ready(function() { + MultiList.init(); +}); \ No newline at end of file diff --git a/fields/multi_links/lang/ru.txt b/fields/multi_links/lang/ru.txt new file mode 100644 index 0000000..261b752 --- /dev/null +++ b/fields/multi_links/lang/ru.txt @@ -0,0 +1,8 @@ +[admin] +name = "Мульти ссылки" +delete = "Удалить элемент" +param = "Наименование" +value = "Ссылка" +del_conf = "Вы уверены, что хотите удалить данный элемент?" +del_head = "Удаление элемента..." +add = "Добавить" \ No newline at end of file diff --git a/fields/multi_links/tpl/field-doc.tpl b/fields/multi_links/tpl/field-doc.tpl new file mode 100644 index 0000000..ef6968b --- /dev/null +++ b/fields/multi_links/tpl/field-doc.tpl @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/fields/multi_links/tpl/field-req.tpl b/fields/multi_links/tpl/field-req.tpl new file mode 100644 index 0000000..ef6968b --- /dev/null +++ b/fields/multi_links/tpl/field-req.tpl @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/fields/multi_links/tpl/field.tpl b/fields/multi_links/tpl/field.tpl new file mode 100644 index 0000000..9f88683 --- /dev/null +++ b/fields/multi_links/tpl/field.tpl @@ -0,0 +1,29 @@ +{if $multi_list != load} + {assign var=multi_link value='' scope="global"} + {if $smarty.request.outside} + + {else} + + {/if} + + + {assign var=multi_link value="load" scope="global"} +{/if} + + \ No newline at end of file diff --git a/fields/rubrics/field.php b/fields/rubrics/field.php new file mode 100644 index 0000000..601fd69 --- /dev/null +++ b/fields/rubrics/field.php @@ -0,0 +1,82 @@ +config_load($lang_file, 'lang'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + $AVE_Template->config_load($lang_file, 'admin'); + + $res = 0; + + if ($_REQUEST['action'] == 'new') + $field_value = 0; + + switch ($action) + { + case 'edit': + if (isset($default)) + { + $sql = $AVE_DB->Query(" + SELECT + id, title + FROM + ". PREFIX ."_rubric_templates + WHERE + rubric_id IN (" . $default . ") + "); + + $rubrics = array(); + + while($row = $sql->FetchAssocArray()) + array_push($rubrics, $row); + + $AVE_Template->assign('default', $default); + $AVE_Template->assign('rubrics', $rubrics); + $AVE_Template->assign('field_id', $field_id); + $AVE_Template->assign('doc_id', (isset($_REQUEST['Id']) ? (int)$_REQUEST['Id'] : 0)); + $AVE_Template->assign('field_value', $field_value); + } + else + { + $AVE_Template->assign('error', $AVE_Template->get_config_vars('error')); + } + + $tpl_file = get_field_tpl($tpl_dir, $field_id, 'admin'); + + return $AVE_Template->fetch($tpl_file); + break; + + case 'doc': + $res = $field_value; + break; + + case 'req': + $res = $field_value; + break; + + case 'name': + return $AVE_Template->get_config_vars('name'); + break; + } + return ($res ? $res : $field_value); +} +?> \ No newline at end of file diff --git a/fields/rubrics/lang/ru.txt b/fields/rubrics/lang/ru.txt new file mode 100644 index 0000000..99e94be --- /dev/null +++ b/fields/rubrics/lang/ru.txt @@ -0,0 +1,3 @@ +[admin] +name = "Шаблоны рубрики" +error = "Не задана рубрика" \ No newline at end of file diff --git a/fields/rubrics/tpl/field.tpl b/fields/rubrics/tpl/field.tpl new file mode 100644 index 0000000..7707437 --- /dev/null +++ b/fields/rubrics/tpl/field.tpl @@ -0,0 +1,16 @@ +{if $rubrics && !isset($error)} + + + +{else} + + + +{/if}