Index: /controller/wpsg_BasketController.class.php
===================================================================
--- /controller/wpsg_BasketController.class.php	(revision 7847)
+++ /controller/wpsg_BasketController.class.php	(revision 7849)
@@ -411,5 +411,5 @@
 			
 			if (isset($_REQUEST['wpsg_form_data'])) {
-				
+
 				parse_str($_REQUEST['wpsg_form_data'], $request);
 				$_REQUEST = array_merge_recursive($_REQUEST, $request);
@@ -482,5 +482,5 @@
 				
 			} else if (isset($_REQUEST['wpsg']['submit']) && intval($_REQUEST['wpsg']['menge']) > 0 && intval($_REQUEST['wpsg']['produkt_id']) > 0) {
-				
+
 				// Ein Produktformular wurde abgeschickt
 				// http://wp.home/wpsg4/warenkorb/?wpsg[produkt_id]=6&wpsg[submit]=1&wpsg[menge]=1
Index: /controller/wpsg_ShopController.class.php
===================================================================
--- /controller/wpsg_ShopController.class.php	(revision 7847)
+++ /controller/wpsg_ShopController.class.php	(revision 7849)
@@ -1633,7 +1633,8 @@
 		 * Gibt die Ausgabe fÃŒr ein Produkt zurÃŒck
 		 */
-		public function renderProdukt($produkt_id, $force_template = false, $force_locale = false)
-		{
-			
+		public function renderProdukt($produkt_id, $force_template = false, $force_locale = false) {
+
+			if (intval($produkt_id) <= 0) return;
+
 			global $locale, $l10n;
 
@@ -1744,5 +1745,5 @@
 
 			$html  = '';
-			$html .= '<form class="wpsg_productform" id="wpsg_produktform_'.$GLOBALS['wpsg_produkt_index'].'" method="post" action="'.$myReferer.'">';
+			$html .= $this->getProduktId($produkt_id).'=<form class="wpsg_productform" id="wpsg_produktform_'.$GLOBALS['wpsg_produkt_index'].'" method="post" action="'.$myReferer.'">';
 			$html .= $this->render($template_file, false);
 			$html .= '<div style="display:none;">';
@@ -3284,5 +3285,5 @@
 			$this->callMods('addShipping', array(&$this->arShipping));
 			$this->callMods('addPayment', array(&$this->arPayment));
-	
+
 			$this->callMods('addShipping', array(&$this->arShippingAll, true));
 			            
@@ -4585,5 +4586,5 @@
 		 */
 		public function checkShippingAvailable() {
- 
+
 			$arShippingNew = array();
 
@@ -4591,6 +4592,5 @@
 			if (!wpsg_isSizedArray($this->view['basket'])) $this->view['basket'] = $this->basket->toArray();
 
-			if (wpsg_isSizedArray($this->view['basket']['produkte']) && !$this->bShippingMerged)
-			{
+			if (wpsg_isSizedArray($this->view['basket']['produkte']) && !$this->bShippingMerged) {
 
 				$arSystemShippingAllowed = array_keys($this->arShipping);
@@ -4602,6 +4602,5 @@
 
 				// Schauen welche Versandarten ÃŒbrig bleiben
-				foreach ($this->view['basket']['produkte'] as $basket_product)
-				{
+				foreach ($this->view['basket']['produkte'] as $basket_product) {
 
 					$oProduct = $this->cache->loadProductObject($this->getProduktID($basket_product['id']));
@@ -4620,6 +4619,5 @@
 				}
 
-				if ($bMoreThen130Allowed === true && (!wpsg_isSizedArray($arProductShippingAllowd) || (sizeof($arProductShippingAllowd) == 1 && in_array('130', $arProductShippingAllowd))))
-				{
+				if ($bMoreThen130Allowed === true && (!wpsg_isSizedArray($arProductShippingAllowd) || (sizeof($arProductShippingAllowd) == 1 && in_array('130', $arProductShippingAllowd)))) {
 
 					// Es ist keine Versandart ÃŒbrig geblieben oder nur Selbstabholung
@@ -4665,7 +4663,5 @@
 					}
 
-				}
-				else
-				{
+				} else {
 
 					$arSystemShippingAllowedMerged = $arProductShippingAllowd;
@@ -4676,6 +4672,5 @@
 				if ($bDontMerge130 && in_array('130', $arProductShippingAllowd) && !in_array('130', $arSystemShippingAllowedMerged)) $arSystemShippingAllowedMerged[] = '130';
 
-				if ($bMerge130 && wpsg_isSizedArray($arSystemShippingAllowedMerged[0]) > 0 && !in_array('130', $arSystemShippingAllowedMerged))
-				{
+				if ($bMerge130 && wpsg_isSizedArray($arSystemShippingAllowedMerged[0]) > 0 && !in_array('130', $arSystemShippingAllowedMerged)) {
 
 					$arSystemShippingAllowedMerged[0][] = '130';
@@ -4685,9 +4680,7 @@
 				//$arSystemShippingAllowedMerged = wpsg_trim($arSystemShippingAllowedMerged);
 
-				foreach ($arSystemShippingAllowedMerged as $shipping)
-				{
-
-					if (is_array($shipping))
-					{
+				foreach ($arSystemShippingAllowedMerged as $shipping) {
+
+					if (is_array($shipping)) {
 
 						asort($shipping, SORT_STRING);
@@ -4722,7 +4715,5 @@
 						}
 
-					}
-					else
-					{
+					} else {
 
 						$arShippingNew[$shipping] = $this->arShipping[$shipping];
Index: /lib/wpsg_basket.class.php
===================================================================
--- /lib/wpsg_basket.class.php	(revision 7847)
+++ /lib/wpsg_basket.class.php	(revision 7849)
@@ -70,6 +70,5 @@
 		 * FÃŒgt ein Produkt in die Session ein
 		 */
-		public function addProduktToSession($produkt_key, $menge)
-		{
+		public function addProduktToSession($produkt_key, $menge) {
 
 			if (!wpsg_isSizedArray($_SESSION['wpsg']['basket'])) $_SESSION['wpsg']['basket'] = array();
Index: /mods/wpsg_mod_deliverynote.class.php
===================================================================
--- /mods/wpsg_mod_deliverynote.class.php	(revision 7847)
+++ /mods/wpsg_mod_deliverynote.class.php	(revision 7849)
@@ -655,6 +655,5 @@
 					
 					$adata = $this->db->fetchRow("SELECT A.* FROM `".WPSG_TBL_ADRESS."` AS A WHERE A.`id` = '".wpsg_q($this->shop->view['order']['shipping_adress_id'])."'");
-						
-					
+
 					$this->shop->view['data']['firma'] = $adata['firma'];
 					$this->shop->view['data']['vname'] = $adata['vname'];
Index: /mods/wpsg_mod_downloadplus.class.php
===================================================================
--- /mods/wpsg_mod_downloadplus.class.php	(revision 7847)
+++ /mods/wpsg_mod_downloadplus.class.php	(revision 7849)
@@ -85,4 +85,11 @@
 			    PRIMARY KEY  (id)
 			) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;";
+
+	        dbDelta($sql);
+
+	        $sql = "CREATE TABLE ".WPSG_TBL_VARIANTS_VARI." (
+				template_id int(11) NOT NULL COMMENT 'Template fÃŒr Downloadplus',				
+				KEY variant_id (variant_id),
+			) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
 
 	        dbDelta($sql);
@@ -1133,6 +1140,5 @@
 
 	        }
-	        else
-	        {
+	        else {
 
 	            return false;
@@ -1968,5 +1974,8 @@
 					foreach ($arVarSet as $var_id => $vari_id) {
 
+						$vari_template_id = $this->db->fetchOne("SELECT `template_id` FROM `".WPSG_TBL_VARIANTS_VARI."` WHERE `id` = '".wpsg_q($vari_id)."' ");
+
 						if (wpsg_isSizedInt($vari_template[$var_id.'_'.$vari_id])) $template_id = $vari_template[$var_id.'_'.$vari_id];
+						else if ($vari_template_id > 0) { $template_id = $vari_template_id; }
 
 					}
Index: /mods/wpsg_mod_productvariants.class.php
===================================================================
--- /mods/wpsg_mod_productvariants.class.php	(revision 7847)
+++ /mods/wpsg_mod_productvariants.class.php	(revision 7849)
@@ -610,6 +610,5 @@
         		$product_data = $this->shop->cache->loadProduct($_REQUEST['edit_id']);
 
-        		if ($_REQUEST['typ'] == "vari_name")
-        		{
+        		if ($_REQUEST['typ'] == "vari_name") {
 
         			$_REQUEST['value'] = wpsg_sinput("text_field", $_REQUEST['value']);
@@ -1423,6 +1422,5 @@
 			$_REQUEST['field'] = wpsg_sinput("text_field", $_REQUEST['field']);
 
-			if (wpsg_isSizedString($_REQUEST['field'], 'name'))
-			{
+			if (wpsg_isSizedString($_REQUEST['field'], 'name')) {
 
 				$_REQUEST['value'] = wpsg_sinput("text_field", $_REQUEST['value']);
@@ -1430,14 +1428,10 @@
 				$this->db->UpdateQuery(WPSG_TBL_VARIANTS, array('name' => wpsg_q($_REQUEST['value'])), " `id` = '".wpsg_q($_REQUEST['field_id'])."' ");
 
-			}
-			else if (wpsg_isSizedString($_REQUEST['field'], 'type'))
-			{
+			} else if (wpsg_isSizedString($_REQUEST['field'], 'type')) {
 
 				$this->db->UpdateQuery(WPSG_TBL_VARIANTS, array('type' => wpsg_q(wpsg_sinput("key", $_REQUEST['value']))), " `id` = '".wpsg_q(wpsg_sinput("key", $_REQUEST['field_id']))."' ");
 				die(self::$arTypeLabel[$_REQUEST['value']]);
 
-			}
-			else if (wpsg_isSizedString($_REQUEST['field'], 'pos'))
-			{
+			} else if (wpsg_isSizedString($_REQUEST['field'], 'pos')) {
 
 				$i = 0; foreach ($_REQUEST['value'] as $var)
@@ -1455,7 +1449,26 @@
 				die('1');
 
-			}
-			else if (wpsg_isSizedString($_REQUEST['field'], 'vari_name'))
-			{
+			} else if (wpsg_isSizedString($_REQUEST['field'], 'template_id') && $this->shop->hasMod('wpsg_mod_downloadplus')) {
+
+				$arTemplates = $this->shop->callMod('wpsg_mod_downloadplus', 'getTemplate', []);
+                $arTemplatesLabel = [
+                    0 => __('UnverÃ€ndert', 'wpsg')
+                ];
+
+                foreach ($arTemplates as $t) $arTemplatesLabel[intval($t['id'])] = $t['name'];
+
+                $template_id = intval($_REQUEST['value']);
+                $vari_id = intval($_REQUEST['field_id']);
+
+                if ($template_id >= 0 && $vari_id > 0 && isset($arTemplatesLabel[$template_id])) {
+
+                	$this->db->UpdateQuery(WPSG_TBL_VARIANTS_VARI, ['template_id' => wpsg_q($template_id)], " `id` = '".wpsg_q($vari_id)."' ");
+
+                	echo $arTemplatesLabel[$template_id];
+                	exit;
+
+                } else throw new \Exception(__('Template konnte nicht gespeichert werden.', 'wpsg'));
+
+			} else if (wpsg_isSizedString($_REQUEST['field'], 'vari_name')) {
 
 				$_REQUEST['value'] = wpsg_sinput("text_field", $_REQUEST['value']);
@@ -1624,7 +1637,5 @@
 				$strQueryHAVING .= $strQueryP_HAVING;
 
-			}
-			else if (wpsg_isSizedInt($product_id))
-			{
+			} else if (wpsg_isSizedInt($product_id)) {
 
 				$strQueryJOIN .= " LEFT JOIN `".WPSG_TBL_PRODUCTS_VARIATION."` AS PV ON (PV.`variation_id` = VI.`id` AND PV.`product_id` = '".wpsg_q($product_id)."') ";
@@ -1632,4 +1643,6 @@
 
 			}
+
+			if ($this->shop->hasMod('wpsg_mod_downloadplus')) $strQuerySELECT .= " , VI.`template_id` ";
 
 			$strQuery = "
@@ -1859,6 +1872,5 @@
 		 * @param unknown $variant_id
 		 */
-		public function getVariant($variant_id, $bHideDeleted = true)
-		{
+		public function getVariant($variant_id, $bHideDeleted = true) {
 
 			$strQueryWHERE = "";
Index: /views/mods/mod_productvariants/admin_edit.phtml
===================================================================
--- /views/mods/mod_productvariants/admin_edit.phtml	(revision 7847)
+++ /views/mods/mod_productvariants/admin_edit.phtml	(revision 7849)
@@ -251,4 +251,43 @@
 
                     </div>
+
+                    <?php if ($this->hasMod('wpsg_mod_downloadplus')) { ?>
+                    <div>
+
+                        <?php
+
+                            $arTemplates = $this->callMod('wpsg_mod_downloadplus', 'getTemplate', []);
+                            $arTemplatesLabel = [
+                                0 => __('UnverÃ€ndert', 'wpsg')
+                            ];
+
+                            foreach ($arTemplates as $t) $arTemplatesLabel[intval($t['id'])] = $t['name'];
+
+                        ?>
+
+                        <span title="<?php echo __('Templatevorgabe fÃŒr PDF Anpassungen mit DownloadPlus', 'wpsg'); ?>" class="wpsg_editable" id="productvariation_template_<?php echo $vari['id']; ?>"><?php
+
+                            $template_id = intval($vari['template_id']);
+
+                            if ($template_id > 0 && isset($arTemplatesLabel[$template_id])) echo $arTemplatesLabel[$template_id];
+                            else __('UnverÃ€ndert', 'wpsg');
+
+                        ?></span>
+
+                        <script>
+
+                            jQuery('#productvariation_template_<?php echo $vari['id']; ?>').wpsg_editable('<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&action=module&modul=wpsg_mod_productvariants&subaction=admin_inlineEdit&noheader=1', {
+                                submitdata: {
+                                    field: 'template_id',
+                                    field_id: '<?php echo $vari['id']; ?>'
+                                },
+                                data: <?php echo wpsg_prepare_for_inlineEdit($arTemplatesLabel); ?>,
+                                type: 'select'
+                            });
+
+                        </script>
+
+                    </div>
+                    <?php } ?>
 					
 					<script>
@@ -465,5 +504,5 @@
 
 	</script>
-    
+
     <?php if (!wpsg_isSizedInt($this->view['product_id'])) { ?>
     <p class="wpsg_hinweis"><?php echo __('Reihenfolge kann mittels Drag&Drop verÃ€ndert werden.', 'wpsg'); ?></p>
Index: /views/mods/mod_productvariants/produkt.phtml
===================================================================
--- /views/mods/mod_productvariants/produkt.phtml	(revision 7847)
+++ /views/mods/mod_productvariants/produkt.phtml	(revision 7849)
@@ -76,6 +76,6 @@
 										<?php $simulated_product_key = $this->callMod('wpsg_mod_productvariants', 'getSimulatedVariKey', array($this->view['data']['product_key'], $var['id'], $vari['variation_id'])); ?>
 										<?php $attachmentID = $this->imagehandler->getAttachmentID($simulated_product_key); ?>
-										
-										<a data-wpsg-id="<?php echo $kv; ?>" class="wpsg_vp_update_image image <?php echo ((wpsg_getStr($this->view['vp_info'][$k]['vari_id']) == $vari['id'])?'akt':''); ?>" href="#">
+
+										<a data-wpsg-id="<?php echo $kv; ?>" class="wpsg_vp_update_image image <?php echo ((wpsg_getStr($this->view['vp_info'][$k]['vari_id']) == $vari['variation_id'])?'akt':''); ?>" href="#">
 											<?php echo wp_get_attachment_image($attachmentID, 'thumbnail'); ?>
 										</a>
@@ -128,21 +128,22 @@
 	<?php } /* $vAktiv = false; ENDE */ ?>
 	
-	<script type="text/javascript">/* <![CDATA[ */
-		
+	<script>
+
 		jQuery(document).ready(function() {
-		
-			jQuery('.wpsg_vp_update').off('change').on('change', wpsg_mod_productvariants_reload); 
 
-			jQuery('.wpsg_vp_update_image').on('click', function(event) {
+			jQuery('.wpsg_vp_update').off('change').on('change', wpsg_mod_productvariants_reload);
+
+			jQuery('#wpsg_mod_productvariants_product_wrap_<?php echo $GLOBALS['wpsg_produkt_index']; ?> .wpsg_vp_update_image').on('click', function(event) {
 
 				jQuery(this).closest('span').find('input').val(jQuery(this).data('wpsg-id'));
 				wpsg_mod_productvariants_reload(event);
-				
+
 				return false;
-				
-			} ); 
-			
+
+			} );
+
 		} );
-	
-	/* ]]> */</script>
+
+	</script>
+
 </div>
Index: /views/mods/mod_productvars/renderTemplate.phtml
===================================================================
--- /views/mods/mod_productvars/renderTemplate.phtml	(revision 7847)
+++ /views/mods/mod_productvars/renderTemplate.phtml	(revision 7849)
@@ -6,5 +6,5 @@
 
 ?>
- 
+
 <div class="wpsg_mod_productvars">
 	<?php foreach ($this->view['wpsg_mod_productvars']['data'] as $pv) { ?>
Index: /views/produkttemplates/standard.phtml
===================================================================
--- /views/produkttemplates/standard.phtml	(revision 7847)
+++ /views/produkttemplates/standard.phtml	(revision 7849)
@@ -13,5 +13,5 @@
 	/** @var wpsg_product $oProduct */
 	$oProduct = $this->view['oProduct'];
-	
+
 ?>
 
