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 @@ + + +/** + * AVE.cms + * + * @package AVE.cms + * @version 3.x + * @filesource + * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru + * + * @license GPL v.2 + */ + +// Мульти лист +function get_field_multi_links($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null){ + + global $AVE_Template; + + $fld_dir = dirname(__FILE__) . '/'; + $tpl_dir = $fld_dir . 'tpl/'; + $fld_name = basename($fld_dir); + + $lang_file = $fld_dir . 'lang/' . (defined('ACP') ? $_SESSION['admin_language'] : $_SESSION['user_language']) . '.txt'; + + $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(); + + 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( + '