Rotation ? - aber wie?!

Hallo Ihr,
mal wieder ich und eine Frage ;o)!

Also ich möchte auf meiner Startseite eine Rotation machen. Diese
sollte sich nur aktualisieren wenn man halt auf die Seite geht oder “F5” drückt :wink:

Im PHP läuft es super! Nur kann ich mein Smarty IMG-Dir nicht mit dem Php verbinden, denke ich.
Habt ihr eine Idee?
Hier der PHP Code…

“[imagedir}]/testbanner.jpg’);”>](“http://webseite1.com)”)
);
srand ((double)microtime()*10000);
$maxwert = count($ads)-1;
$nr = rand(0,$maxwert);
echo $ads[$nr][Banner];
?>

Nur mal so eine Frage wo führst du obigen code denn aus ? Doch nicht mitten im Template oder ? Du solltest vielleicht darüber nachdenken dafür ein kleines Modul zu schreiben wenn du soetwas machen möchtest.

Aggrosoft it intelligence GbR

doch, im Template.

ja wenn ich wüsste wie ich ein mdoul schreibe…dann würde ich das bestimmt machen :frowning:

Also so schwierig wie das die “Partner” hier immer darlegen ist das doch garnicht. Mein “Standardrumpf” für eine Sache die ich in allen Templates haben möchte geht als Modul von oxviewconfig aus - da kommst du nämlich überall ran über

[{ $oViewConf->meineModulFunktion() }]

Also legst du dir im modules Ordner einen Unterordner an, z.B. carousel

modules/carousel/

So und nun brauchst du eine Klasse in dem Ordner die das eigentliche Modul ist, also legst du dir eine datei in diesem Ordner an z.B. carousel_viewconfig.php:

modules/carousel/carousel_viewconfig.php;

So jetzt musst du in dieser datei als minimum den Rumpf angeben für ein Modul, der sieht so aus:

<?php

class carousel_viewconfig extends carousel_viewconfig_parent{

}

?>

Achte darauf das die Vererbung immer über eine Klasse die auf _parent endet und genauso heißt wie dein Modul lauten muss - also extends carousel_viewconfig_parent

und nun kannst du in dieser Klasse Funktionen definieren die dir z.B. zufällig ein Bild generieren:

public function getCarousel(){

$num = rand() * 5;

$str = “<img src='meinBild”.$num."’ />";

return $str;

}

Innerhalb dieser Funktionen hast du dann auch zugriff auf das ganze Oxid Framework, z.B. auf oxConfig, darüber könntest du auch den Pfad zu einem bestimmten Bilderordner bekommen:

$conf = oxConfig::getInstance();

//Für z.B. die ZOOM_1 Bilder

$myPath = $conf->getPictureDir(false) . “z1/” ;

So und nun musst du das Modul nur noch aktivieren in deinem Backend in Stammdaten -> Grundeinstellungen -> System unter Module trägst du folgendes ein - vorher unbedingt die DB sichern (also mindestens oxconfig Tabell), wenn ein Fehler im Modul ist geht der Shop baden bis du entweder das Modul reparierst oder das Backup einspielst weil oxviewconfig quasi überall verwendet wird:

oxviewconfig => carousel/carousel_viewconfig

Wenn du alles richtig gemacht hast und im admin speicherst sollte dein Shop jetzt noch funktionieren - ansonsten entweder display_errors = on in der php.ini setzen (google hilft) wenn du eine weiße Seite erhältst oder das Backup einspielen und den Fehler suchen bis es nicht mehr weiß ist :wink:

Nun kannst du in deinen Templates über folgenden Aufruf auf deine Funktion zugreifen:

[{ $oViewConf->getCarousel() }]

So herzlichen Glückwunsch du hast dein erstes Modul geschrieben - ich durfte mir das alles selber raus fieseln und es war grauenvoll, eventuell findet diese Anleitung ja nen Platz in der Hilfe.

Aggrosoft it intelligence GbR

Vielen Vielen Dank für deine Hilfe.
Hab das soweit alles verstanden und eingebaut.

Auf meiner Startseite kommt folgende Fehlermeldung:

Fatal error: Call to a member function getrotation() on a non-object in xxxxx\www\oxid3 mp\oxbaseshop.0^%%18^186^186A9544%%start.tpl.php on line 58

Ordnername bei modules: rotation
Dateiname im Ordner: rotation_viewconfig.php
Inhalt der Datei:

<?php
class rotation_viewconfig extends rotation_viewconfig_parent{
}
?>

Im Admin eingetragen unter:
oxviewconfig => rotation/rotation_viewconfig

In meine Start.tpl folgendes eingetragen:
[{$oViewConf->getrotation()}]

Aber…der Computer sagt nein :frowning:

Mal vornweg: Ich hoffe, daß Deine PHP-Datei auch noch mindestens eine Methode enthält?!
Deine Fehlermeldung sagt ja aus, daß in der Instanz des oxviewconfig-Klasse keine so benannte Methode zu finden ist.

Und eigentlich mehr eine Frage an Aggrosoft: Warum versucht Du, die Rotation in die Konfiguration reinzubauen? Das hat ja inhaltlich nun gar nix mit Config zu tun.
Brauchst Du die Rotation im gesamten Shop, verwende eine Component-Klasse, ansonsten packe das doch in ein Modul der ensprechenden View-Klasse.

Daniel Seifert
D³ Data Development - Thomas Dartsch
OXID Premium Solution- & Technologiepartnerhttp://www.shopmodule.com

nein, ich bräuchte es nur auf der Startseite von unserem Shop…

Naja oxviewconfig einfach darum weil es halt überall verfügbar sein sollte, könntest du das mit der component Klasse nochmal verdeutlichen ? Mir ist bewusst das es die ganzen oxcmp geschichten gibt aber wie implementiert man selbst so etwas ? Gibt es dazu Hinweise irgendwo ?

Aber nochmal zum Thema, ja wenn du es nur auf der Startseite brauchst dann kannst du die view als parent nehmen, also im Admin Backend dann statt

oxviewconfig => rotation/rotation_viewconfig

lieber

oxstart => rotation/rotation_viewconfig

dann kommst du im template über

[{$oView->meineFunktion()}]

ran. Aber halt eben nur in dem start template und nirgendwo anders, dafür geht dir aber nicht gleich der ganze shop baden wenn du nen Fehler machst.

Und in deiner Klasse muss diese Funktion natürlich auch enthalten sein:

<?php
class rotation_viewconfig extends rotation_viewconfig_parent{

public function meineFunktion(){

}
}
?>

Aggrosoft it intelligence GbR

Die Component-Geschichten beinhalten die shopweit benötigten Methoden. So mußt Du nicht an die Basics ran (wie z.B. der oxviewconfig). Die CMP-Klassen sind nach deren Verwendung (category, user …) unterteilt. Die können ganz normal erweitert bzw. überladen werden.

Nun kannst Du solche allgemeinen Sachen wie die Rotation an die oxcmp_utils anhängen. Oder wie im genannten Fall performanter an die start-Klasse, wenn es nur dort benötigt wird. Und vielleicht noch etwas performanter: Als Smarty-Plugin. Dann kannst Du es überall verwenden, wo Dir gerade danach ist, ohne daß Du Dir Gedanken um die Klassen machen mußt.

Zu sehr gehe ich jetzt hier aber nicht in die Tiefe. Dazu gibt es Schulungen. :slight_smile:

Daniel Seifert
D³ Data Development - Thomas Dartsch
OXID Premium Solution- & Technologiepartnerhttp://www.shopmodule.com

Danke für eure Hilfe,

jedoch bleibt nach wie vor diese Fehlermeldung da:

Fatal error: Call to a member function rotation() on a non-object in xxxxxx\www\oxid3 mp\oxbaseshop.0^%%18^186^186A9544%%start.tpl.php on line 58

:frowning:

Die Funktion sieht jetzt so aus:

<?php
class rotation_viewconfig extends rotation_viewconfig_parent{
public function rotation(){$num = rand() * 5;
$conf = oxConfig::getInstance();
$myPath = $conf->getPictureDir(false) . “z1/” ;
$str = “<img src='banner1.gif”.$num."’ />";
return $str;
}
}
?>

Und in der start.tpl steht das:
[{$oView->rotation()}]

:frowning:

Ach so ist das gemeint, also quasi von den oxcmp Klassen aberben - guter Tip, danke. Das mit dem Smarty Plugin ist auch nicht schlecht wenn man wie hier nur eine rotation will. Ich schule mich lieber selbst :wink:

tsn hast du denn im adminbereich auch die Vererbung umgestellt ? Also auf oxstart => rotation/rotation_viewconfig ?

Aggrosoft it intelligence GbR

Les’ ich das gerade richtig?: oxid3 ??

Da sieht die Sache ein klein wenig anders aus. Bitte gib mal 'ne Richtung, um welche Shopversion es sich handelt.

Daniel Seifert
D³ Data Development - Thomas Dartsch
OXID Premium Solution- & Technologiepartnerhttp://www.shopmodule.com

ja es ist die 3er Version…?!