Einbindung Modul nach Upgrade auf 4.9.5

Hallo,

wir haben vor einigen Jahren ein kleines Modul zur Vorab-Berechnung der Versandkosten programmieren lassen - leider ist der damalige Programmierer nicht mehr verfügbar aber vielleicht kann mir jmd. helfen was ich ändern muss damit ich es jetzt in der 4.9.5. unter Erweiterungen > Module aktivieren kann?

Das Modul besteht aus nur einer Seite und war bisher in der Oxid 4.4.6 über
folgenden Eintrag unter Module verknüpft:

oxviewconfig => weightcalc/weightcalc

Das ganze Skript sieht wiefolgt aus:

<?php

class weightcalc extends oxViewConfig {


	function weightcalc($params='') {
		ob_start();
		
		//create an array for the prices
		$weights = array();
		
		//parse the weights into a nice format		
		$params = trim($params);
		$params = explode("
",$params);
		foreach ($params as $line) {
			$tmp = explode("|",$line);
			if (count($tmp)==2) {
				$weight = floatVal($tmp[0]);
				$price = floatVal($tmp[1]);
				$weights[$weight]=$price;
			}
		}
		
		
		//parse weight
		if (array_key_exists('weightcalc_kg',$_GET)) {
		$kg = $_GET['weightcalc_kg']; 
		$kg = str_replace(',','.',$kg);
		$kg = floatVal($kg);
		} else {
			$kg = -1;
		}


		//create the form
		$oLang = oxLang::getInstance();
		$showval = '';
		if ($kg>0) {
			$showval = str_replace('.',',',$kg);
		}
		echo '		
		<form action="?" method="get" class="weightcalc-form">
			<p><span>'.$oLang->translateString('WEIGHTCALC_TOTALWEIGHT').'</span><input class="weightcalc-weight" type="text" name="weightcalc_kg" value="'.$showval.'" /> kg
			<input type="submit" class="weightcalc-send" value="'.$oLang->translateString('WEIGHTCALC_SEND').'" />
			</p>			
		</form>
		';
	
		//calculate weights
		if ($kg>0) {
			$price = '';
			$final = false;
			foreach ($weights as $k=>$v) {
				
				if ($price=='') {
					$price = $v;
				}
				if ($kg>$k) {
					//echo $kg.' greater than '.$k.', setting '.$k.'kg/'.$v.' as price<br>';
					$price = $v;
				} else if ($kg<=$k) {
					if (!$final) {
						//echo $kg.' less than/eq '.$k.', setting '.$k.'kg/'.$v.' as final price<br>';
						$price = $v;
						$final = true;
					}
				}
			}
			
			echo '<p class="weightcalc-confirmtext">'.$oLang->translateString('WEIGHTCALC_CONFIRM').' <span class="weightcalc-price">'.number_format($price, 2, ',', '.').' € inkl. MwSt. und Verpackung</span></p>';
		} else {

		}
		
	
		$buffer = ob_get_contents();
		ob_end_clean();
	
		return $buffer;
	}


}

?>

Bin selbst auf diese Anleitung gestoßen:
http://www.ackis-oxid.de/2012/alte-module-in-neues-oxid-portieren/

und habe mir metadata.php erstellt welche wiefolgt aussieht:


<?php
$aModule = array(
    'id'           => 'weightcalc',
    'title'        => 'Versandkostenrechner',
    'description'  => 'Versandkostenrechner',
    'version'      => '1.2',
    'author'       => 'Dave',
        'extend'      => array(
        'oxviewconfig' => 'weightcalc/weightcalc',
),
);
?>

Diese scheint aber nicht zu stimmen, denn ich kann das Skript dann zwar aktivieren aber es schiesst mir den ganzen Shop ab…

Ersetze mal

$oLang = oxLang::getInstance();

durch

$oLang = oxRegistry::getLang();

und probier nochmal.

Danke für die Rückmeldung probier ich gerne aus…
Meinst Du die Meta-Seite ist so korrekt, kann ich eigentlich kaum glauben da ich
davon recht wenig Ahnung habe?

Ich habe jetzt etwas Schiss das mir der ganze Shop wieder um die Ohren fliegt, besteht da generell irgendeine Gefahr. Letztendlich hatte ich die Modul + Metadatei umbenannt und entfernt und dann lief es wieder aber zwischendurch war ich schon etwas nervös als Front- und Backend tot waren

Sollte die metadata.php nicht so aussehen?

 <?php
/**
 * Module information
 */ 
$aModule = array(
    'id'           => 'weightcalc',
    'title'        => 'Versandkostenrechner',
    'description'  => 'Versandkostenrechner',
    'version'      => '1.2',
    'author'       => 'Dave',
    'extend'       => array(
    'oxorder' 	=> 'weightcalc/weightcalc'
    )
);

Dann das ganze in modules/weightcalc schieben und aktivieren. Weiter komme ich auch nicht.

Ich würd’s so machen…

[B]$sMetadataVersion = '1.1';[/B]
$aModule = array(...
'[B]oxviewconfig[/B]' => 'weightcalc/weightcalc'

korrekt.

<?php

class weightcalc extends [B]weightcalc_parent[/B]{

[B]public [/B]function weightcalc...

Hallo Foxido,

Danke wäre dass dann so richtig - irgendwie habe ich wohl Syntaxfehler drin?


<?php

$sMetadataVersion = ‘1.0’;
$aModule = array(
‘id’ => ‘weightcalc’,
’title’ => ‘Versandkostenrechner’,
’extend’ => array(
'oxviewconfig' => 'weightcalc/weightcalc'
),
);	
?>	

Skript:


<?php

class weightcalc extends weightcalc_parent{

public function weightcalc($params='') {
        ob_start();
        
        //create an array for the prices
        $weights = array();
        
        //parse the weights into a nice format        
        $params = trim($params);
        $params = explode("
",$params);
        foreach ($params as $line) {
            $tmp = explode("|",$line);
            if (count($tmp)==2) {
                $weight = floatVal($tmp[0]);
                $price = floatVal($tmp[1]);
                $weights[$weight]=$price;
            }
        }
        
        
        //parse weight
        if (array_key_exists('weightcalc_kg',$_GET)) {
        $kg = $_GET['weightcalc_kg']; 
        $kg = str_replace(',','.',$kg);
        $kg = floatVal($kg);
        } else {
            $kg = -1;
        }


        //create the form
        $oLang = oxLang::getInstance();
        $showval = '';
        if ($kg>0) {
            $showval = str_replace('.',',',$kg);
        }
        echo '        
        <form action="?" method="get" class="weightcalc-form">
            <p><span>'.$oLang->translateString('WEIGHTCALC_TOTALWEIGHT').'</span><input class="weightcalc-weight" type="text" name="weightcalc_kg" value="'.$showval.'" /> kg
            <input type="submit" class="weightcalc-send" value="'.$oLang->translateString('WEIGHTCALC_SEND').'" />
            </p>            
        </form>
        ';
    
        //calculate weights
        if ($kg>0) {
            $price = '';
            $final = false;
            foreach ($weights as $k=>$v) {
                
                if ($price=='') {
                    $price = $v;
                }
                if ($kg>$k) {
                    //echo $kg.' greater than '.$k.', setting '.$k.'kg/'.$v.' as price<br>';
                    $price = $v;
                } else if ($kg<=$k) {
                    if (!$final) {
                        //echo $kg.' less than/eq '.$k.', setting '.$k.'kg/'.$v.' as final price<br>';
                        $price = $v;
                        $final = true;
                    }
                }
            }
            
            echo '<p class="weightcalc-confirmtext">'.$oLang->translateString('WEIGHTCALC_CONFIRM').' <span class="weightcalc-price">'.number_format($price, 2, ',', '.').' € inkl. MwSt. und Verpackung</span></p>';
        } else {

        }
        
    
        $buffer = ob_get_contents();
        ob_end_clean();
    
        return $buffer;
    }


}

?> 

Mit den Anführungszeichen wird das nix. Nimm den Anhang und gut is. Blockerweiterung für die neue Methode wäre jetzt noch fällig. Bitte Anleitungen lesen.

Hallo Foxido,

Vielen, vielen Dank! Funktioniert jetzt wieder - Super Service!

Gruß

Irgendwie habe ich mich doch zu früh gefreut, es scheint der Aufruf für das Frontend passt nicht - jedenfalls kann ich dann auf die CMS-Seiten im Backend nicht mehr zugreifen bzw. das Backend stürzt ab.

Der Aufruf was bisher wiefolgt:


<!-- MODULE: WeightCalc -->
[{$oViewConf->weightcalc('
5kg|10
10kg|15
usw...
 ')}]

Lad d.och mal das ganze Modul mit dem hoch, was de da einbindst in den Quelltext

Das ganze funktioniert im Frontend bereits, allerdings lassen sich die CMS-Seiten im Backend nicht mehr aufrufen:

Also folgendes wird in eine CMS-Seite eingepflegt



<!-- MODULE: WeightCalc -->
[{$oViewConf->weightcalc('
5kg|10
10kg|15
18kg|15
19kg|20
25kg|20
30kg|24
50kg|34
100kg|39
150kg|44
200kg|49
250kg|49
300kg|49
350kg|49
400kg|49
450kg|49
500kg|49
600kg|49
700kg|49
800kg|49
900kg|49
1000kg|49
1200kg|49
1400kg|49
1600kg|49
1800kg|49
2000kg|49
 ')}]

die dazugehörige Skriptdatei welche Foxido beretis angepasst sieht so aus:


<?php

class weightcalc extends weightcalc_parent{

public function weightcalc($params='') {
        ob_start();
        
        //create an array for the prices
        $weights = array();
        
        //parse the weights into a nice format        
        $params = trim($params);
        $params = explode("
",$params);
        foreach ($params as $line) {
            $tmp = explode("|",$line);
            if (count($tmp)==2) {
                $weight = floatVal($tmp[0]);
                $price = floatVal($tmp[1]);
                $weights[$weight]=$price;
            }
        }
        
        
        //parse weight
        if (array_key_exists('weightcalc_kg',$_GET)) {
        $kg = $_GET['weightcalc_kg']; 
        $kg = str_replace(',','.',$kg);
        $kg = floatVal($kg);
        } else {
            $kg = -1;
        }


        //create the form
        $oLang = oxRegistry::getLang();  
        $showval = '';
        if ($kg>0) {
            $showval = str_replace('.',',',$kg);
        }
        echo '        
        <form action="?" method="get" class="weightcalc-form">
            <p><span>'.$oLang->translateString('WEIGHTCALC_TOTALWEIGHT').'</span><input class="weightcalc-weight" type="text" name="weightcalc_kg" value="'.$showval.'" /> kg
            <input type="submit" class="weightcalc-send" value="'.$oLang->translateString('WEIGHTCALC_SEND').'" />
            </p>            
        </form>
        ';
    
        //calculate weights
        if ($kg>0) {
            $price = '';
            $final = false;
            foreach ($weights as $k=>$v) {
                
                if ($price=='') {
                    $price = $v;
                }
                if ($kg>$k) {
                    //echo $kg.' greater than '.$k.', setting '.$k.'kg/'.$v.' as price<br>';
                    $price = $v;
                } else if ($kg<=$k) {
                    if (!$final) {
                        //echo $kg.' less than/eq '.$k.', setting '.$k.'kg/'.$v.' as final price<br>';
                        $price = $v;
                        $final = true;
                    }
                }
            }
            
            echo '<p class="weightcalc-confirmtext">'.$oLang->translateString('WEIGHTCALC_CONFIRM').' <span class="weightcalc-price">'.number_format($price, 2, ',', '.').' € inkl. MwSt. und Verpackung</span></p>';
        } else {

        }
        
    
        $buffer = ob_get_contents();
        ob_end_clean();
    
        return $buffer;
    }


} 


die Metadata.php so:


<?php
// -------------------------------------------------
// FOXIDO FRONTEND EXT CLASS DEMO (c) 2014 FOXIDO.DE
// -------------------------------------------------
$sMetadataVersion = '1.1';
$aModule = array(
'id' => 'weightcalc',
'title' => 'Versandkostenrechner',
'extend' => array(
'oxviewconfig' => 'weightcalc/weightcalc'
),
); 

Dann hast Du noch irgendwo anders einen Fehler. Einbinden kann man das so ganz einfach. http://495.foxido.de/sss/ Musst nur dafür sorgen,. dass etwas ausgegeben wird.

Bermerkung am Rande: Ich habe mir den Inhalt bisher nicht angeschaut. Wer schreibt denn solche Module?