Index: /controller/wpsg_ShopController.class.php
===================================================================
--- /controller/wpsg_ShopController.class.php	(revision 5452)
+++ /controller/wpsg_ShopController.class.php	(revision 5454)
@@ -2935,4 +2935,5 @@
 					}					
 					
+					$bDrin = false;
 					foreach ($matches[1] as $k => $m)
 					{
@@ -3640,5 +3641,7 @@
 			$oProduct = wpsg_product::getInstance($product_id);
 			
-			if (wpsg_isSizedString($oProduct->detailname) && $detailname === true)
+			$product_detailname = $oProduct->detailname;
+			
+			if (wpsg_isSizedString($detailname) && $detailname === true)
 			{
 				
Index: /model/wpsg_product.class.php
===================================================================
--- /model/wpsg_product.class.php	(revision 5452)
+++ /model/wpsg_product.class.php	(revision 5454)
@@ -334,17 +334,8 @@
 			$strQueryORDER = " P.`cdate` ASC ";
 				
-			if (wpsg_isSizedArray($arFilter['product_ids']))
-			{
-				 
-				$strQueryWHERE .= " AND P.`id` IN (".wpsg_q(implode(',', $arFilter['product_ids'])).") ";
-				
-			}
-			
-			if (wpsg_isSizedArray($arFilter['productgroup_ids']))
-			{
-				
-				$strQueryWHERE .= " AND P.`pgruppe` IN (".wpsg_q(implode(',', $arFilter['productgroup_ids'])).") ";
-				
-			}
+			if (wpsg_isSizedArray($arFilter['product_ids'])) $strQueryWHERE .= " AND P.`id` IN (".wpsg_q(implode(',', $arFilter['product_ids'])).") ";
+			if (wpsg_isSizedArray($arFilter['productgroup_ids'])) $strQueryWHERE .= " AND P.`pgruppe` IN (".wpsg_q(implode(',', $arFilter['productgroup_ids'])).") ";
+			if (wpsg_isSizedString($arFilter['price_min'])) $strQueryWHERE .= " AND P.`preis` >= '".wpsg_q($arFilter['price_min'])."' ";
+			if (wpsg_isSizedString($arFilter['price_max'])) $strQueryWHERE .= " AND P.`preis` <= '".wpsg_q($arFilter['price_max'])."' ";
 			
 			if (wpsg_isSizedArray($arFilter['cat_ids']))
Index: /mods/wpsg_mod_productview.class.php
===================================================================
--- /mods/wpsg_mod_productview.class.php	(revision 5452)
+++ /mods/wpsg_mod_productview.class.php	(revision 5454)
@@ -26,4 +26,5 @@
 		
 			add_shortcode('wpsg_productview', array($this, 'wpsg_sc_productview'));
+			add_shortcode('wpsg_productview_filter', array($this, 'wpsg_sc_productview_filter'));
 				
 		} // public function init()
@@ -62,5 +63,5 @@
 			{
 					
-				wp_enqueue_script('wpsg_mod_productview_js', $this->shop->getRessourceURL('mods/mod_productview/productview.js'));
+				wp_enqueue_script('wpsg_mod_productview_js', $this->shop->getRessourceURL('mods/mod_productview/productview.js'), array('jquery', 'jquery-ui-slider'));
 				 		
 			}
@@ -87,4 +88,19 @@
 		} // public function tinymce_plugin($plugin_array)
 		
+		public function settings_edit()
+		{
+			
+			$this->shop->render(WPSG_PATH_VIEW.'mods/mod_productview/settings_edit.phtml');
+			
+		} // public function settings_edit()
+		
+		public function settings_save()
+		{
+			
+			$this->shop->update_option('wpsg_mod_productview_filter_min', $_REQUEST['wpsg_mod_productview_filter_min']);
+			$this->shop->update_option('wpsg_mod_productview_filter_max', $_REQUEST['wpsg_mod_productview_filter_max']);
+			
+		} // public function settings_save()
+		
 		/* Modulfunktionen */
 		
@@ -92,12 +108,30 @@
 		{
 						
-			$atts = @unserialize($_REQUEST['wpsg_atts']);
-			
-			if (wpsg_isSizedInt($_REQUEST['wpsg_page'])) $atts['page'] = $_REQUEST['wpsg_page'];
+			$atts = $_REQUEST['wpsg_atts'];
+			
+			if (wpsg_isSizedString($atts['filter'])) parse_str($atts['filter'], $atts['filter']);
 			
 			die($this->wpsg_sc_productview($atts));
 			
 		} // public function refreshRedirect()
-		 				
+		 	
+		/**
+		 * Filter fÃŒr die Produktansicht
+		 */
+		public function wpsg_sc_productview_filter($atts)		
+		{
+			
+			if ($this->shop->hasMod('wpsg_mod_produktartikel'))
+			{
+				
+				if (is_tax('wpsg-tax')) $this->shop->view['arCat'] = $this->shop->callMod('wpsg_mod_produktartikel', 'getCategorySelectArray', array(get_queried_object()->term_id));
+				else $this->shop->view['arCat'] = $this->shop->callMod('wpsg_mod_produktartikel', 'getCategorySelectArray', array(get_queried_object()->term_id));
+												
+			}
+			
+			return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_productview/productview_filter.phtml', false);
+			
+		} // public function wpsg_sc_productview_filter($atts)
+		
 		/**
 		 * Shortcode fÃŒr die Anzeige der Produkte
@@ -112,4 +146,27 @@
 			$this->shop->view['wpsg_mod_productview']['atts'] = $atts;
 			
+			if (wpsg_isSizedInt($atts['cols'], 3))
+			{
+				
+				$this->shop->view['wpsg_mod_productview']['cols'] = 3;
+				$this->shop->view['wpsg_mod_productview']['col_class']['title'] = 'col-lg-0';
+				$this->shop->view['wpsg_mod_productview']['col_class']['order'] = 'col-lg-4';
+				$this->shop->view['wpsg_mod_productview']['col_class']['info'] = 'col-lg-8';
+				$this->shop->view['wpsg_mod_productview']['col_class']['product'] = 'col-lg-4';
+								
+			}
+			else
+			{
+				
+				$this->shop->view['wpsg_mod_productview']['cols'] = 4;
+				$this->shop->view['wpsg_mod_productview']['col_class']['title'] = 'col-lg-3';
+				$this->shop->view['wpsg_mod_productview']['col_class']['order'] = 'col-lg-3';
+				$this->shop->view['wpsg_mod_productview']['col_class']['info'] = 'col-lg-6';
+				$this->shop->view['wpsg_mod_productview']['col_class']['product'] = 'col-lg-3';
+				
+			}
+			
+			$this->shop->view['wpsg_mod_productview']['cols'] = wpsg_getStr($atts['cols'], '4');
+			
 			$GLOBALS['wpsg_mod_productview_index'] = $this->shop->view['wpsg_mod_productview']['index'] + 1; 
 			
@@ -146,9 +203,29 @@
 			{
 				
+				$arCatIDs = wpsg_trim(explode(',', $atts['cat_ids']));
+				foreach ($arCatIDs as $k => $cat_id)
+				{
+					
+					$arSubCat = get_terms('wpsg-tax', array(						
+						'child_of' => $cat_id							
+					));
+					
+					foreach ($arSubCat as $sub_cat)
+					{
+						
+						$arCatIDs[] = $sub_cat->term_id;
+						
+					}
+										
+				}
+				
 				$arFilter = array(
-					'cat_ids' => wpsg_trim(array_unique(explode(',', $atts['cat_ids'])))
+					'cat_ids' => $arCatIDs
 				);
 				
 			}
+			
+			if (wpsg_isSizedString($atts['filter']['price_min'])) $arFilter = wpsg_array_merge($arFilter, array('price_min' => $atts['filter']['price_min']));
+			if (wpsg_isSizedString($atts['filter']['price_max'])) $arFilter = wpsg_array_merge($arFilter, array('price_max' => $atts['filter']['price_max']));
 			
 			$arReturn = wpsg_product::find($arFilter, false);
Index: /mods/wpsg_mod_produktartikel.class.php
===================================================================
--- /mods/wpsg_mod_produktartikel.class.php	(revision 5452)
+++ /mods/wpsg_mod_produktartikel.class.php	(revision 5454)
@@ -558,5 +558,6 @@
 				),
 				'show_ui' => true,
-				'show_in_menu' => true
+				'show_in_menu' => true,
+				'hierarchical' => true
 			));
 			
Index: /views/admin/kundendaten_tab2.phtml
===================================================================
--- /views/admin/kundendaten_tab2.phtml	(revision 5452)
+++ /views/admin/kundendaten_tab2.phtml	(revision 5454)
@@ -27,5 +27,5 @@
 			<td class="col2"><span class="wpsg_editable" id="kundenvariable_name_<?php echo $c_id; ?>"><?php echo wpsg_hspc($c['name']); ?></span></td>
 			<td class="col3">
-				<select class="form-control wpsg-sm" name="pflicht[custom][<?php echo $c_id; ?>][show]">
+				<select class="form-control" name="pflicht[custom][<?php echo $c_id; ?>][show]">
 					<option <?php echo (($c['show'] == '0')?'selected="selected"':''); ?> value="0"><?php echo __('Ja', 'wpsg'); ?></option>
 					<option <?php echo (($c['show'] == '1')?'selected="selected"':''); ?> value="1"><?php echo __('Nein', 'wpsg'); ?></option>
@@ -34,5 +34,5 @@
 			</td>
 			<td class="col3">
-				<select class="form-control wpsg-sm" onchange="if (jQuery(this).val() == '1') { jQuery('#row_auswahl_<?php echo $c_id; ?>').show(); jQuery('#row_auswahl_<?php echo $c_id; ?> input').first().focus(); } else jQuery('#row_auswahl_<?php echo $c_id; ?>').hide();" name="pflicht[custom][<?php echo $c_id; ?>][typ]">
+				<select class="form-control" onchange="if (jQuery(this).val() == '1') { jQuery('#row_auswahl_<?php echo $c_id; ?>').show(); jQuery('#row_auswahl_<?php echo $c_id; ?> input').first().focus(); } else jQuery('#row_auswahl_<?php echo $c_id; ?>').hide();" name="pflicht[custom][<?php echo $c_id; ?>][typ]">
 					<option <?php echo (($c['typ'] == '0')?'selected="selected"':''); ?> value="0"><?php echo __('Textfeld', 'wpsg'); ?></option>
 					<option <?php echo (($c['typ'] == '1')?'selected="selected"':''); ?> value="1"><?php echo __('Auswahlfeld', 'wpsg'); ?></option>
@@ -40,10 +40,9 @@
 				</select>
 			</td>
-			<td class="col4">				
-				<a href="#" title="<?php echo __('HTML Code generieren', 'wpsg'); ?>" onclick="return wpsg_genKVCode(<?php echo $c_id; ?>);"><span class="glyphicon glyphicon-modal-window"></span></a>
-			</td>
-			<td class="col5">
+			<td class="col4">
 			
-				<a href="#" title="<?php echo __('Kundenvariable lÃ¶schen', 'wpsg'); ?>" onclick="return wpsg_removeCustomField(<?php echo $c_id; ?>);"><span class="glyphicon glyphicon-trash"></span></a>
+				<a href="#" class="wpsg-glyphlink-td" title="<?php echo __('HTML Code generieren', 'wpsg'); ?>" onclick="return wpsg_genKVCode(<?php echo $c_id; ?>);"><span class="glyphicon glyphicon-modal-window"></span></a>
+			
+				<a href="#" class="wpsg-glyphlink-td" title="<?php echo __('Kundenvariable lÃ¶schen', 'wpsg'); ?>" onclick="return wpsg_removeCustomField(<?php echo $c_id; ?>);"><span class="glyphicon glyphicon-trash"></span></a>
 				
 				<script type="text/javascript">
@@ -68,6 +67,6 @@
 			<td class="col0"></td>
 			<td class="col1"><?php echo __('AuswahlmÃ¶glichkeiten ("|" als Trenner)', 'wpsg'); ?></td>
-			<td class="col2345" colspan="4">
-				<input type="text" class="form-control wpsg-sm" name="pflicht[custom][<?php echo $c_id; ?>][auswahl]" value="<?php echo wpsg_hspc($c['auswahl']); ?>" />
+			<td class="col234" colspan="3">
+				<input type="text" class="form-control" name="pflicht[custom][<?php echo $c_id; ?>][auswahl]" value="<?php echo wpsg_hspc($c['auswahl']); ?>" />
 			</td>
 		</tr>
Index: /views/admin/module.phtml
===================================================================
--- /views/admin/module.phtml	(revision 5452)
+++ /views/admin/module.phtml	(revision 5454)
@@ -34,5 +34,6 @@
 
 <?php if (isset($_REQUEST['modul'])) { ?>
-<div class="wpsg_admin_content form-horizontal">		
+<div class="wpsg_admin_content form-horizontal">
+	<?php echo wpsg_drawForm_AdminboxStart($this->arAllModule[$_REQUEST['modul']]->name); ?>		
 	<form name="form1" action="<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&amp;action=module&amp;modul=<?php echo $_REQUEST['modul']; ?>&amp;noheader=1" method="post" enctype="multipart/form-data">
 		
@@ -94,4 +95,5 @@
 	</form>
 	<?php } ?>
+	<?php echo wpsg_drawForm_AdminboxEnd(); ?>
 </div>
 <?php } else { ?>
Index: /views/css/admin.css
===================================================================
--- /views/css/admin.css	(revision 5452)
+++ /views/css/admin.css	(revision 5454)
@@ -22,4 +22,6 @@
 #wpsg-bs .form-horizontal .editable { padding-top:0px; }
 #wpsg-bs .wpsg-glyphicon { margin-right:10px; }
+#wpsg-bs .wpsg-glyphlink-td > span { margin-left:5px; margin-top:5px; }
+#wpsg-bs .wpsg-glyphlink-td:hover { text-decoration:none; }
 #wpsg-bs .wpsg_error { color:red; }
 #wpsg-bs .form-group-sm .form-control { padding-left:8px; }
@@ -115,2 +117,10 @@
 .wpsg-mod_produktartikel_categorydiv label { font-weight:normal; font-size:14px; }
 .wpsg-mod_produktartikel_categorydiv label input[type="checkbox"] { margin-top:-2px; }
+
+/* Modul Produktattribute (wpsg_mod_productattribute) */
+.wpsg_mod_produktattribute_table .col_show { text-align:center; width:60px; }
+.wpsg_mod_produktattribute_table .col_action { width:60px; text-align:right; }
+.wpsg_mod_produktattribute_table .col_typ { width:75px; }
+.wpsg_mod_produktattribute_table .col_id { width:15px; }
+.wpsg_mod_produktattribute_table .auswahlrow2 td { border-top:0px; }
+.wpsg_mod_produktattribute_table > tbody + tbody { border-top:0px; }
Index: /views/css/frontend.css
===================================================================
--- /views/css/frontend.css	(revision 5452)
+++ /views/css/frontend.css	(revision 5454)
@@ -338,5 +338,5 @@
 .wpsg_productview_product .wpsg_mod_productview_bottom .wpsg_mod_productview_button:hover { text-decoration:none; background-color:#29556E; color:#FFFFFF; }
 .wpsg_productview_product .wpsg_mod_productview_bottom .wpsg_mod_productview_button .fa { margin-left:10px; } 
-.wpsg_productview_product .wpsg_mod_productview_go { display:none; position:absolute; left:0px; top:0px; width:100%; height:100%; background-color:rgba(228, 243, 248, 1); mix-blend-mode:multiply; text-align:center; }
+.wpsg_productview_product .wpsg_mod_productview_go { display:none; position:absolute; left:0px; top:0px; width:100%; height:100%; background-color:rgba(228, 243, 248, 0.75); text-align:center; }
 .wpsg_productview_product .wpsg_mod_productview_go > .wpsg_star_wrap { font-size:22px; color:#0F303F; width:80%; position:absolute; left:50%; margin-left:-40%; top:10%; font-size:18px; font-weight:normal; }
 .wpsg_productview_product .wpsg_mod_productview_go .wpsg_mod_productview_price_wrap { color:#0F303F; width:100%; position:absolute; left:50%; margin-left:-50%; top:30%; font-size:20px; line-height:125%; font-weight:bold; }
@@ -347,6 +347,8 @@
 .wpsg_productview_product:hover .wpsg_mod_productview_go { display:block; }
 .wpsg_mod_productview_loading { width:100%; height:100%; background-color:rgba(249, 252, 253, 0.75); position:absolute; left:0px; top:0px; }
- 
-  
+.wpsg_mod_productview_filter #wpsg_mod_productview_filter_price-range { position:relative; margin-right:16px; }
+.wpsg_mod_productview_filter #wpsg_mod_productview_filter_price-range .ui-slider-handle { cursor:pointer; width:16px; height:16px; background-color:#787878; position:absolute; } 
+.wpsg_mod_productview_filter #wpsg_mod_productview_filter_price-range .ui-slider-bg { margin-left:16px; background-color:#E1E1E1; width:100%; height:2px; position:absolute; top:8px; }
+
 @media screen and (max-width: 600px) {
 	
Index: /views/mods/mod_productview/productview.js
===================================================================
--- /views/mods/mod_productview/productview.js	(revision 5452)
+++ /views/mods/mod_productview/productview.js	(revision 5454)
@@ -2,7 +2,18 @@
 	function wpsg_switchProductview(index, page, order, mode)
 	{
+		 
+		var atts = jQuery.parseJSON(jQuery('#wpsg_productview_' + index + ' input[name="wpsg_atts"]').val());
+			
+		atts.page = page;
+		atts.order = order;
+		atts.mode = mode; 
 		
-		var atts = jQuery('#wpsg_productview_' + index + ' input[name="wpsg_atts"]').val();
-					
+		if (jQuery('#wpsg_mod_productview_filter').length > 0)
+		{
+		
+			atts.filter = jQuery('#wpsg_mod_productview_filter input').serialize();
+			
+		}
+		
 		jQuery('#wpsg_productview_' + index).append('<div class="wpsg_mod_productview_loading"></div>');
 		
@@ -12,8 +23,5 @@
 				'wpsg_mod': 'wpsg_mod_productview',
 				'wpsg_action': 'refresh', 
-				'wpsg_atts': atts,
-				'wpsg_page': page,
-				'wpsg_order': order,
-				'wpsg_mode': mode
+				'wpsg_atts': atts		
 			},
 			'success': function(data) {
@@ -39,4 +47,28 @@
 	jQuery(document).ready(function() {
 		
+		var filter_min = parseFloat(jQuery('#wpsg_mod_productview_filter_price_info input[name="price_min"]').val());
+		var filter_max = parseFloat(jQuery('#wpsg_mod_productview_filter_price_info input[name="price_max"]').val());
+		
+		jQuery("#wpsg_mod_productview_filter_price-range").slider( {
+			range: true,
+			min: filter_min,
+			max: filter_max,
+			values: [filter_min, filter_max],
+			slide: function(event, ui) {
+				
+				jQuery('#wpsg_mod_productview_filter_price_info input[name="price_min"]').val(ui.values[0]);
+				jQuery('#wpsg_mod_productview_filter_price_info input[name="price_max"]').val(ui.values[1]);
+				
+				jQuery('#wpsg_mod_productview_filter_price_info .min').html(wpsg_numberformat(ui.values[0], 2));
+				jQuery('#wpsg_mod_productview_filter_price_info .max').html(wpsg_numberformat(ui.values[1], 2));
+				
+			},
+			stop: function(event, ui) {
+				
+				wpsg_switchProductview(1, 1);
+				
+			}
+		} );
+		
 		jQuery('.wpsg_productview').each(function() { 
 			
Index: /views/mods/mod_productview/productview.phtml
===================================================================
--- /views/mods/mod_productview/productview.phtml	(revision 5452)
+++ /views/mods/mod_productview/productview.phtml	(revision 5454)
@@ -9,15 +9,19 @@
 <div class="wpsg_productview" id="wpsg_productview_<?php echo $this->view['wpsg_mod_productview']['index']; ?>">
 	
+	<input type="hidden" name="wpsg_atts" value="<?php echo @wpsg_hspc(json_encode($this->view['wpsg_mod_productview']['atts'])); ?>" />
+	
 	<div class="wpsg_productview_head row">
 	
-		<h2 class="wpsg_productview_title col-lg-3"><?php echo wpsg_hspc($this->view['wpsg_mod_productview']['title']); ?></h2>
+		<?php if ($this->view['wpsg_mod_productview']['cols'] != 3) { ?>
+		<h2 class="wpsg_productview_title <?php echo $this->view['wpsg_mod_productview']['col_class']['title']; ?>"><?php echo wpsg_hspc($this->view['wpsg_mod_productview']['title']); ?></h2>
+		<?php } ?>
 		
 		<?php if (wpsg_isSizedArray($this->view['wpsg_mod_productview']['products'])) { ?>
-		<div class="col-lg-3 wpsg_mod_productview-order">
+		<div class="wpsg_mod_productview-order <?php echo $this->view['wpsg_mod_productview']['col_class']['order']; ?>">
 			<?php echo __('Sortierung', 'wpsg'); ?><span class="glyphicon glyphicon-menu-down"></span>
 			<strong>Neueste zuerst</strong>
 		</div>
 		
-		<div class="col-lg-6 wpsg_mod_productview-info">
+		<div class="wpsg_mod_productview-info <?php echo $this->view['wpsg_mod_productview']['col_class']['info']; ?>">
 			<strong><?php 
 				echo wpsg_translate(__('Anzeige #1# - #2#', 'wpsg'), 
@@ -36,5 +40,5 @@
 		
 			<?php $i = 0; foreach ($this->view['wpsg_mod_productview']['products'] as $oProduct) { $i ++; ?>
-			<div class="wpsg_productview_product wpsg_productview_product_<?php echo $oProduct->id; ?> col-lg-3">
+			<div class="wpsg_productview_product wpsg_productview_product_<?php echo $oProduct->id; ?> <?php echo $this->view['wpsg_mod_productview']['col_class']['product']; ?>">
 				
 				<?php if ($this->hasMod('wpsg_mod_produktbilder')) { ?>
@@ -90,10 +94,8 @@
 					 					
 				</div>
-				
-				<input type="hidden" name="wpsg_atts" value="<?php echo @wpsg_hspc(serialize($this->view['wpsg_mod_productview']['atts'])); ?>" />
-								
+												
 			</div>
 			
-			<?php if ($i % 4 === 0) { ?>
+			<?php if ($i % $this->view['wpsg_mod_productview']['cols'] === 0) { ?>
 			<div class="clearfix visible-lg-block"></div>
 			<?php } ?>
Index: /views/mods/mod_productview/productview_filter.phtml
===================================================================
--- /views/mods/mod_productview/productview_filter.phtml	(revision 5454)
+++ /views/mods/mod_productview/productview_filter.phtml	(revision 5454)
@@ -0,0 +1,20 @@
+<div class="wpsg_mod_productview_filter" id="wpsg_mod_productview_filter">
+	<?php if ($this->hasMod('wpsg_mod_produktartikel') && wpsg_isSizedArray($this->view['arCat'])) { ?>
+	<div class="wpsg_mod_productview_filter_item wpsg_mod_productview_filter_cat">
+		<ul>
+			<?php foreach ($this->view['arCat'] as $cat_id => $cat_name) { ?>
+			<li><a href="<?php echo get_term_link($cat_id); ?>" title="<?php echo wpsg_hspc($cat_name); ?>"><?php echo wpsg_hspc($cat_name); ?></a></li>
+			<?php } ?>
+		</ul>
+	</div> 
+	<?php } ?>
+	<div class="wpsg_mod_productview_filter_item wpsg_mod_productview_filter_price">	
+		<h2><?php echo __('Sortierung nach Preis', 'wpsg'); ?></h2>
+		<div id="wpsg_mod_productview_filter_price-range"><span class="ui-slider-bg"></span></div>
+	</div>
+	<div id="wpsg_mod_productview_filter_price_info">
+		<?php echo __('Preis:', 'wpsg'); ?><span class="min"><?php echo wpsg_ff($this->get_option('wpsg_mod_productview_filter_min')); ?></span> <?php echo $this->get_option('wpsg_currency'); ?> - <span class="max"><?php echo wpsg_ff($this->get_option('wpsg_mod_productview_filter_max')); ?></span> <?php echo $this->get_option('wpsg_currency'); ?>
+		<input type="hidden" name="price_min" value="<?php echo $this->get_option('wpsg_mod_productview_filter_min'); ?>" />
+		<input type="hidden" name="price_max" value="<?php echo $this->get_option('wpsg_mod_productview_filter_max'); ?>" />
+	</div>
+</div>
Index: /views/mods/mod_productview/settings_edit.phtml
===================================================================
--- /views/mods/mod_productview/settings_edit.phtml	(revision 5454)
+++ /views/mods/mod_productview/settings_edit.phtml	(revision 5454)
@@ -0,0 +1,9 @@
+<?php
+
+	/**
+	 * Template fÃŒr die Einstellungen des Moduls "Produktansichten"
+	 */
+
+?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_productview_filter_min', __('Minimaler Preis fÃŒr Preisfilter', 'wpsg'), $this->get_option('wpsg_mod_productview_filter_min')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_productview_filter_max', __('Maximaler Preis fÃŒr Preisfilter', 'wpsg'), $this->get_option('wpsg_mod_productview_filter_max')); ?>
Index: /views/mods/mod_produktattribute/list.phtml
===================================================================
--- /views/mods/mod_produktattribute/list.phtml	(revision 5452)
+++ /views/mods/mod_produktattribute/list.phtml	(revision 5454)
@@ -9,120 +9,124 @@
 <p><?php echo __('Keine Produktattribute hinterlegt.', 'wpsg'); ?></p>
 <?php } else { ?>
-<table class="wpsg_mod_produktattribute_table">
-	<tr>
-		<th class="col_id"><?php echo __('ID', 'wpsg'); ?></th>
-		<th class="col_name" colspan="2"><?php echo __('Bezeichnung', 'wpsg'); ?></th>
-		<th class="col_html"></th>
-		<th class="col_show"><a href="#" onclick="return false;" class="wpsg_icon wpsg_icon_lupe" title="<?php echo __('Werte direkt in jedem Template anzeigen wenn gesetzt.', 'wpsg'); ?>"></a></th>
-		<th class="col_typ"><?php echo __('Typ', 'wpsg'); ?></th>		
-		<th class="col_action"></th>
-	</tr>
+<table class="wpsg_mod_produktattribute_table table">
+	<thead>
+		<tr>
+			<th class="col_id"><?php echo __('ID', 'wpsg'); ?></th>
+			<th class="col_name" colspan="2"><?php echo __('Bezeichnung', 'wpsg'); ?></th>			
+			<th class="col_show"><?php echo __('Anzeigen', 'wpsg'); ?></th>
+			<th class="col_typ"><?php echo __('Typ', 'wpsg'); ?></th>		 
+			<th class="col_action"></th>
+		</tr>
+	</thead>	
 	<?php foreach ($this->view['data'] as $pa) { ?>
-	<tr id="pa_<?php echo $pa['id']; ?>" class="wpsg_tablerow">
-		<td class="col_id wpsg_id"><?php echo $pa['id']; ?></td>
-		<td colspan="2" id="pa_<?php echo $pa['id']; ?>_name" class="col_name wpsg_editable"><?php echo wpsg_hspc($pa['name']); ?></td>
-		<td class="col_html">
-			<a class="wpsg_icon wpsg_icon_html wpsg_icon_center" href="#" title="<?php echo __('HTML Code generieren', 'wpsg'); ?>" onclick="return wpsg_genPACode(<?php echo $pa['id']; ?>);"></a>
-		</td>
-		<td class="col_show">
-			<input title="<?php echo __('Werte direkt in jedem Template anzeigen wenn gesetzt.', 'wpsg'); ?>" id="show_<?php echo $pa['id']; ?>" <?php echo (($pa['autoshow'] == '1')?'checked="checked"':''); ?> type="checkbox" value="1" />
-		</td>
-		<td class="col_typ">
-			<select id="typ_<?php echo $pa['id']; ?>" name="pa[<?php echo $pa['id']; ?>][typ]" onchange="wpsg_mod_produktattribute_changeTyp(<?php echo $pa['id']; ?>);">
-				<option <?php echo (($pa['typ'] == '0')?'selected="selected"':''); ?> value="0"><?php echo __('Textfeld', 'wpsg'); ?></option>
-				<option <?php echo (($pa['typ'] == '1')?'selected="selected"':''); ?> value="1"><?php echo __('Textfeld (RTE)', 'wpsg'); ?></option>
-				<option <?php echo (($pa['typ'] == '2')?'selected="selected"':''); ?> value="2"><?php echo __('Auswahlfeld', 'wpsg'); ?></option>
-				<option <?php echo (($pa['typ'] == '3')?'selected="selected"':''); ?> value="3"><?php echo __('Checkbox', 'wpsg'); ?></option>
-			</select>			
-		</td>		
-		<td class="col_action">
-			
-			<a id="del_<?php echo $pa['id']; ?>" class="wpsg_icon wpsg_icon_remove" href="#" title="<?php echo __('Produktvariable lÃ¶schen', 'wpsg'); ?>" onclick="return wpsg_removePV(<?php echo $pv['id']; ?>);"></a>
-			
-			<script type="text/javascript">
-
-				jQuery('#del_<?php echo $pa['id']; ?>').bind('click', function() {
-
-					if (!confirm('<?php echo __('Sind Sie sich sicher, dass Sie dieses Produktattribute lÃ¶schen mÃ¶chten?', 'wpsg'); ?>')) return false;
-
-					jQuery('#wpsg_pa_list').html('<img src="<?php echo WPSG_URL; ?>views/gfx/ajax-loader.gif" alt="<?php echo __('Bitte warten ...', 'wpsg'); ?>" />');
-					
-					jQuery.ajax( {
-						url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&subaction=module&modul=wpsg_mod_produktattribute&do=inlinedit&noheader=1',
-						data: {
-							field: 'delete',
-							pa_id: '<?php echo $pa['id']; ?>'
-						},
-						success: function(data) {
-							jQuery('#wpsg_pa_list').html(data);		
-						}
+	<tbody id="pa_<?php echo $pa['id']; ?>">	
+		<tr class="wpsg_tablerow">
+			<td class="col_id wpsg_id"><?php echo $pa['id']; ?></td>
+			<td class="col_name" colspan="2"><span id="pa_<?php echo $pa['id']; ?>_name"><?php echo wpsg_hspc($pa['name']); ?></span></td>			
+			<td class="col_show">
+				<input title="<?php echo __('Werte direkt in jedem Template anzeigen wenn gesetzt.', 'wpsg'); ?>" id="show_<?php echo $pa['id']; ?>" <?php echo (($pa['autoshow'] == '1')?'checked="checked"':''); ?> type="checkbox" value="1" />
+			</td>
+			<td class="col_typ">
+				<select id="typ_<?php echo $pa['id']; ?>" name="pa[<?php echo $pa['id']; ?>][typ]" onchange="wpsg_mod_produktattribute_changeTyp(<?php echo $pa['id']; ?>);">
+					<option <?php echo (($pa['typ'] == '0')?'selected="selected"':''); ?> value="0"><?php echo __('Textfeld', 'wpsg'); ?></option>
+					<option <?php echo (($pa['typ'] == '1')?'selected="selected"':''); ?> value="1"><?php echo __('Textfeld (RTE)', 'wpsg'); ?></option>
+					<option <?php echo (($pa['typ'] == '2')?'selected="selected"':''); ?> value="2"><?php echo __('Auswahlfeld', 'wpsg'); ?></option>
+					<option <?php echo (($pa['typ'] == '3')?'selected="selected"':''); ?> value="3"><?php echo __('Checkbox', 'wpsg'); ?></option>
+				</select>			
+			</td>
+			<td class="col_action">
+				
+				<a class="wpsg-glyphlink-td" href="#" title="<?php echo __('HTML Code generieren', 'wpsg'); ?>" onclick="return wpsg_genPACode(<?php echo $pa['id']; ?>);">
+					<span class="glyphicon glyphicon-modal-window"></span>
+				</a>
+				
+				<a id="del_<?php echo $pa['id']; ?>" class="wpsg-glyphlink-td" href="#" title="<?php echo __('Produktvariable lÃ¶schen', 'wpsg'); ?>" onclick="return wpsg_removePV(<?php echo $pv['id']; ?>);">
+					<span class="glyphicon glyphicon-trash"></span>
+				</a>
+				
+				<script type="text/javascript">/* <![CDATA[ */
+	
+					jQuery('#del_<?php echo $pa['id']; ?>').bind('click', function() {
+	
+						if (!confirm('<?php echo __('Sind Sie sich sicher, dass Sie dieses Produktattribute lÃ¶schen mÃ¶chten?', 'wpsg'); ?>')) return false;
+	
+						jQuery('#wpsg_pa_list').html('<img src="<?php echo WPSG_URL; ?>views/gfx/ajax-loader.gif" alt="<?php echo __('Bitte warten ...', 'wpsg'); ?>" />');
+						
+						jQuery.ajax( {
+							url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&subaction=module&modul=wpsg_mod_produktattribute&do=inlinedit&noheader=1',
+							data: {
+								field: 'delete',
+								pa_id: '<?php echo $pa['id']; ?>'
+							},
+							success: function(data) {
+								jQuery('#wpsg_pa_list').html(data);		
+							}
+						} );
+						
 					} );
-					
-				} );
-			
-				jQuery('#show_<?php echo $pa['id']; ?>').bind('change', function() {
-
-					if (jQuery(this).attr("checked")) value = 1; else value = 0;
-					
-					jQuery.ajax( {
-						url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&subaction=module&modul=wpsg_mod_produktattribute&do=inlinedit&noheader=1',
-						data: {
-							field: 'show',
-							value: value,
-							pa_id: '<?php echo $pa['id']; ?>'
-						},
-						success: function(data) {
-							if (data != "1") alert(data);
-						}
+				
+					jQuery('#show_<?php echo $pa['id']; ?>').bind('change', function() {
+	
+						if (jQuery(this).attr("checked")) value = 1; else value = 0;
+						
+						jQuery.ajax( {
+							url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&subaction=module&modul=wpsg_mod_produktattribute&do=inlinedit&noheader=1',
+							data: {
+								field: 'show',
+								value: value,
+								pa_id: '<?php echo $pa['id']; ?>'
+							},
+							success: function(data) {
+								if (data != "1") alert(data);
+							}
+						} );
+						
 					} );
-					
-				} );
-			
-				jQuery('#pa_<?php echo $pa['id']; ?>_name').wspg_editable('<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&subaction=module&modul=wpsg_mod_produktattribute&do=inlinedit&noheader=1', {
-					submitdata: { 
-			    		field: 'name',
-			    		pa_id: '<?php echo $pa['id']; ?>'
-					},
-					submit  : '<?php echo __('Speichern', 'wpsg'); ?>',
-					placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
-					indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
-			    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
-				});
-			
-			</script>
-			
-		</td>
-	</tr>
-	<tr class="auswahlrow auswahlrow_<?php echo $pa['id']; ?>">
-		<td></td>
-		<td>
-			<label>
-				<?php echo __('Auswahl (| als Trenner)', 'wpsg'); ?>:
-			</label>
-			<script type="text/javascript">
-
-				jQuery(document).ready(function() {
-					
-					jQuery('#pa_<?php echo $pa['id']; ?>_auswahl').wspg_editable('<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&subaction=module&modul=wpsg_mod_produktattribute&do=inlinedit&noheader=1', {
+				
+					jQuery('#pa_<?php echo $pa['id']; ?>_name').wspg_editable('<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&subaction=module&modul=wpsg_mod_produktattribute&do=inlinedit&noheader=1', {
 						submitdata: { 
-				    		field: 'auswahl',
+				    		field: 'name',
 				    		pa_id: '<?php echo $pa['id']; ?>'
 						},
-						data: '<?php echo $pa['auswahl']; ?>',
-						submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+						submit  : '<?php echo __('Speichern', 'wpsg'); ?>',
 						placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
 						indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
 				    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
 					});
-
-					wpsg_mod_produktattribute_changeTyp(<?php echo $pa['id']; ?>);
-					
-				} );
-			
-			</script>
-		</td>
-		<td colspan="4" class="wpsg_editable" id="pa_<?php echo $pa['id']; ?>_auswahl"><?php echo wpsg_hspc(((trim($pa['auswahl']) == '')?__('Bitte anklicken um Auswahl kommagetrennt zu definieren', 'wpsg'):$pa['auswahl'])); ?></td>
-	</tr>
-	<?php } ?>
+				
+				/* ]]> */</script>
+				
+			</td>
+		</tr> 
+		<tr class="auswahlrow auswahlrow2 auswahlrow_<?php echo $pa['id']; ?>">
+			<td></td>
+			<td colspan="5">
+				<label><?php echo __('AuswahlmÃ¶glichkeiten ("|" als Trenner)', 'wpsg'); ?>:</label>&nbsp;				
+				<script type="text/javascript">/* <![CDATA[ */
+	
+					jQuery(document).ready(function() {
+						
+						jQuery('#pa_<?php echo $pa['id']; ?>_auswahl').wspg_editable('<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&subaction=module&modul=wpsg_mod_produktattribute&do=inlinedit&noheader=1', {
+							submitdata: { 
+					    		field: 'auswahl',
+					    		pa_id: '<?php echo $pa['id']; ?>'
+							},
+							data: '<?php echo $pa['auswahl']; ?>',
+							submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+							placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+							indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+					    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+						});
+	
+						wpsg_mod_produktattribute_changeTyp(<?php echo $pa['id']; ?>);
+						
+					} );
+				
+				/* ]]> */</script>			
+				<span id="pa_<?php echo $pa['id']; ?>_auswahl"><?php echo wpsg_hspc(((trim($pa['auswahl']) == '')?__('Bitte anklicken um Auswahl kommagetrennt zu definieren', 'wpsg'):$pa['auswahl'])); ?></span>
+			</td>
+		</tr>
+	</tbody> 
+	<?php } ?>	
 </table>
 
@@ -135,5 +139,5 @@
 		jQuery('.wpsg_mod_produktattribute_table').sortable( {
 			helper: wpsg_Tablefix,
-			items: 'tr.wpsg_tablerow',
+			items: 'tbody',
 			handler: '.wpsg_id',
 			update: function(event, ui) {
@@ -154,5 +158,5 @@
 				
 			}
-		} );
+		} ).disableSelection();
 		
 	} );
Index: /views/mods/mod_produktattribute/settings_edit.phtml
===================================================================
--- /views/mods/mod_produktattribute/settings_edit.phtml	(revision 5452)
+++ /views/mods/mod_produktattribute/settings_edit.phtml	(revision 5454)
@@ -8,5 +8,5 @@
 
 ?>
-<script type="text/javascript">
+<script type="text/javascript">/* <![CDATA[ */
  
 	/**
@@ -64,53 +64,45 @@
 	{
 
-		jQuery("#wpsg_pa_code_dialog").dialog( {
-			'dialogClass': 'wp-dialog',           
-	        'modal': true,
-	        'width': 600,
-	        'height': 300,	       
-	        'title': '<?php echo __('HTML Code Block', 'wpsg'); ?>',
-	        open: function(event, ui) {
-
-	        	jQuery('#wpsg_pa_code_dialog .wpsg_dialog').html('<img src="<?php echo WPSG_URL; ?>views/gfx/ajax-loader.gif" alt="<?php echo __('Bitte warten ...', 'wpsg'); ?>" />');
-	        	
-	        	jQuery.ajax( {
-	    			url: 'admin.php?page=wpsg-Admin&action=module&modul=wpsg_mod_produktattribute&do=genPACode&noheader=1',
-	    			data: {
-	    				'pa_id': pa_id
-	    			},
-	    			success: function(data)
-	    			{
-		    			jQuery('#wpsg_pa_code_dialog .wpsg_dialog').html(data);
-	    			}
-	        	} );
-		        
-	        }
-		} );
+		jQuery('#wpsg_code_dialog .modal-body').html('<img src="<?php echo WPSG_URL; ?>views/gfx/ajax-loader.gif" alt="<?php echo __('Bitte warten ...', 'wpsg'); ?>" />');
 		
+		jQuery('#wpsg_code_dialog').modal( { } )
+		
+		jQuery.ajax( {
+			url: 'admin.php?page=wpsg-Admin&action=module&modul=wpsg_mod_produktattribute&do=genPACode&noheader=1',
+			data: { 'pa_id': pa_id },
+			success: function(data) { jQuery('#wpsg_code_dialog .modal-body').html(data); }
+    	} );
+ 		
 		return false;
 		
 	} // function wpsg_genPACode(pa_id)
 	
-</script>
+/* ]]> */</script>
 
-<div id="wpsg_pa_code_dialog" style="display:none;"><div class="wpsg_dialog"></div></div>
+<!-- Modal fÃŒr Codeanzeige -->
+<div class="modal fade" id="wpsg_code_dialog" tabindex="-1" role="dialog">
+  <div class="modal-dialog" role="document">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+        <h4 class="modal-title" id="myModalLabel"><?php echo __('HTML Code Block', 'wpsg'); ?></h4>
+      </div>
+      <div class="modal-body">
+        
+      </div>
+      <div class="modal-footer">
+        <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('SchlieÃen', 'wpsg'); ?></button> 
+      </div>
+    </div>
+  </div>
+</div>
 
-<div class="wpsg_admin_content">
-	<div class="wpsg_admin_box">		
-			  		
-		<div class="head">
-			<div class="title">
-				<div class="fulltab">
-					<?php echo __('Produktattribute', 'wpsg'); ?>
-					<a title="<?php echo __('Neues Produktattribut anlegen', 'wpsg'); ?>" href="" class="wpsg_icon wpsg_icon_right wpsg_icon_add" onclick="return wpsg_addPA();"></a>
-				</div>
-			</div>
-		</div>
-		<div class="content" id="wpsg_pa_list">
-			<?php $this->mod->pa_listAction(); ?>
-		</div>
-				
-	</div>
+<div class="content" id="wpsg_pa_list">
+	<?php $this->mod->pa_listAction(); ?>
 </div>
 
 <div class="clear"></div>
+
+<br />
+
+<a href="#" onclick="return wpsg_addPA();"><span class="wpsg-glyphicon glyphicon glyphicon-plus"></span><?php echo __('Neues Produktattribut anlegen', 'wpsg'); ?></a>
