Grundlagen der Funktionen

GRUNDLAGEN DER FUNKTIONEN

Bei Funktionen handelt sich um eigenständige Programmteile, die man beliebig häufig aufrufen kann. Funktionen haben den Vorteil, dass man diese einmalig nur schreibt und von der gewünschten Stellen aufrufen kann. Weiterer Vorteil ist, dass der Code strukturiert wird und damit übersichtlicher und wartungsfreundlicher wird.

Bei PHP gibt es bereits sehr viele vordefinierter Funktionen für Standardvorgänge. Die eigenen Funktionen werden benutzerdefinierte Funktionen genannt.

Die Funktion kann überall im Script stehen. Empfehlenswert ist es diese aber zu Bündeln und entweder oben oder unten zu platzieren.

Der return-Befehl führt dazu, dass die Funktion verlassen wird und es folgt die Rückkehr zum Programm, wo die Funktion aufgerufen wurde. Auch führt es dazu, dass die Funktion einen Wert zurückgibt.

Aktuelles Datum und Uhrzeit ausgeben (ohne Übergabe von Werten):

function jetzt ()
{

echo date ("d:m:yy H:i:s");

}

// Funktion aufrufen

jetzt ();

Funktion mit Werten übergeben und eine Addition vornehmen:

function addieren($a, $b)
{
$addition = $a+$b;
return $addition;
}

//Funktionsaufruf 
echo addieren(3,13). "<br>";
echo addieren(6,5) . "<br>";
echo addieren(1,5) . "<br>";
echo addieren(4,8) . "<br>";

Im Browser sollten folgende Werte erscheinen:

 

DER BEITRAG WIRD NOCH ERWEITERT WERDEN

 

Grundlagen zu Arrays

GRUNDLAGEN ZU ARRAYS

Arrays sind spezielle Variablen, die beliebig viele Werte (sogar unterschiedliche Datentypen) speichern können. Arrays werden oft auch Feld-Variablen oder Felder genannt.

Arrays sind nützlich für die reihenweise Verarbeitung von Daten.  Wenn man z.B. von einer Berechnung 30 Ergebnisse bekommt und diese für die spätere Weiterverarbeitung zwischenspeichern möchte, dann wäre das mit den Datentypen Integer, float, sting etc. sehr umständlich, da diese Variablen nur einen Wert aufnehmen können. Man müsste dann 30 einzelne Variablen dafür haben. Besonders in Situationen, wo man die Anzahl der einzelnen Ergebnisse nicht kennt, wäre den Zwischenspeichern mit Einzelvariablen auch sehr arbeitsintensiv. Hier kommen Arrays ins Spiel: alle Ergebnissen können in einer Array-Variablen gespeichert werden.

Arrays können Mehrdimensional sein – d.h. im Array kann noch ein weiterer Array sein. Die Elemente eines Arrays bestehen aus einem Schlüssel bzw. Index und einem Wert. Es gibt zwei Arten von Arrays, die im Aufbau und auch beim Zugreifen auf einzelne Einträge in einem Array unterschiedlich sind.

Assoziative Arrays: Die einzelnen Werte (Value) innerhalb eines Arrays werden über einen eindeutigen Schlüssel (Key genannt) angesprochen.

Numerische indizierte Arrays: Die einzelnen Werte (Value) innerhalb eines Arrays werden über einen Index, einer fortlaufenden Nummer, angesprochen. Es ist aber auch möglich, Indexwerte manuell zu vergeben.

Ein indiziertes Array
$land = array ("Polen", "Kuba", "Schweden");

Strings werden in Anführungszeichen gesetzt, double, integer ohne.

Entspricht:

Auf einen indizierten Array greift man folgendermaßen zu:

$land[INDEX];

echo $land[2];

Als Ergebnis sollte „Schweden“ rauskommen.

Assoziative Arrays

Bei diesen Arrays werden keine Indizes benutzt, sondern Schlüssel über deren Wert man an die einzelnen Werte zugreifen kann. Der Vorteil zu indizierten Arrays ist, dass man einen beliebigen Namen für den Schlüssel vergeben und somit bedeutungstragend werden.

<?php

$stadt = array("München" => "Deutschland",
"Metz" => "Frankreich",
"Istanbul" => "Türkei");

$l = "München";
echo "Die Stadt " . $l . " ist in " . $stadt["München"] . "<br>" ;
echo "Die Stadt " . $l . " ist in " . $stadt[$l];

?>

Im Internetbrowser sollte folgendes erscheinen:

Auf das assoziative Array wird mit „$auswahl = $stadt[München];“ zugegriffen. Bei einem „echo $auswahl;“ sollte „Deutschland“ angezeigt werden.

Arrays ändern

Indiziert:

$land[2] = "Luxemburg";

Assoziativ:

$stadt["München"] = "Germany";

Um einen Eintrag aus einem Array zu löschen, wird die Funktion unset() verwendet.

Indizierter Array: unset ($land[1]);
Assoziativer Array: unset($stadt[„Metz“]);

Erweiterung von Arrays

Indiziert:

$land[] = Wert;

Bei einem indizierten Array braucht man keinen Wert anzugeben. Das Array wird am Ende ergänzt und der Index automatisch erhöht.

Assoziativ:

$stadt["Key"] = Wert;

Bei einem assoziativen Array muss der Schlüssel/Key angegeben werden, anderenfalls verwendet PHP automatisch einen numerischen Indexwert dafür. Ist der Schlüssel bereits vergeben, dann wird kein Element hinzugefügt, sondern der bestehende überschrieben.

Assoziative und indizierte Arrays schließen sich nicht gegenseitig aus. Eine Mischform ist möglich.

Ausgabe des Arrays mit print_r
<?php
$stadt = array("München" => "Deutschland",
"Metz" => "Frankreich",
"Istanbul" => "Türkei");

echo "<pre>"; // Zeilenweise anzeigen
print_r ($stadt);
echo "</pre>";
?>

Der Internetbrowser zeigt den kompletten Inhalt des Arrays an:

Schleifen (bspw. um Daten aus einem eindimensionalen Array zu extrahieren)

Mit der foreach() -Schleife kann man einzelne Werte aus dem Array auslesen. Es wird jedes Element in eine neue Variable zwischengespeichert. Der Vorteil dieser Schleife ist, dass man nicht die Anzahl der Array-Einträge kennen muss, noch den Schlüssel/Key. Die Schleife läuft bis zum letzten Eintrag des Arrays durch.

Die foreach()-Schleife bei indixierten Arrays:

$land = array ("Polen", "Kuba", "Schweden");

foreach ($land as $value) {
	echo "Wert: $value<br>\n";
}

Der Internetbrowser zeigt diese Daten an:

Die foreach()-Schleife bei assoziativen Arrays:

$stadt = array("München" => "Deutschland",
"Metz" => "Frankreich",
"Istanbul" => "Türkei");

foreach ($stadt as $key => $value) {
echo "$key ist in $value<br>";
}

Der Internetbrowser zeigt diese Daten an:

Mehrdimensionale Arrays (INDIZIERT)

Mehrdimensionale Arrays sind verschachtelte Arrays, man sprich auch in diesem Kontext von inneren und äußeren Arrays.

Mehrdimensionale Arrays können assoziativ sein und auch numerisch indiziert. Eine Mischform ist hierbei auch möglich.

Aufbauschema eines numerisch-indizierten mehrdimensionaler Arrays:

So kann man auf eine bestimme Angabe in einem mehrdimensionalen indizierten Array zugreifen:

$kunde = array
(
	array ("Jochen",
			"DEU",
			"Geburtstag 12.09.1974"
			),
	array ("Igor",
			"RUS",
			"Geburtstag 19.05.1966
			"
			),
	array ("Carlos",
			"ESP",
			"Geburtstag 24.02.1955
			"
			),
);

echo "Der Kunde " . $kunde[0][0] . " hat am " . $kunde[0][2] . " Geburtstag und kommt aus " . $kunde[0][1] . "</br>";

Der Internetbrowser sollte folgendes anzeigen:

Erweitern kann man einen numerisch-indizierten mehrdimensionalen Array so:

$kunde[3][0] = "Hakan";
$kunde[3][1] = "TUR";
$kunde[3][2] = "Geburtstag 23.08.71";

Hier nochmal der komplette numerisch-indizierte mehrdimensionale Array inkl. Erweiterung und Ausgabe:

<?php

// ein mehrdimensionaler numerisch-indizierter Array wird angelegt

$kunde = array
(
array ("Jochen",
"DEU",
"Geburtstag 12.09.1974"
),
array ("Igor",
"RUS",
"Geburtstag 19.05.1966
"
),
array ("Carlos",
"ESP",
"Geburtstag 24.02.1955
"
),
);

// der erste Kunde wird mit seinen "Eckdaten" angezeigt
echo "Der Kunde " . $kunde[0][0] . " hat am " . $kunde[0][2] . " Geburtstag und kommt aus " . $kunde[0][1] . "</br>";


// der Array wird um einen neuen Kunden "Hakan" erweitert
$kunde[3][0] = "Hakan";
$kunde[3][1] = "TUR";
$kunde[3][2] = "Geburtstag 23.08.71";


// der Array wird ausgegeben
echo "<pre>";
print_r($kunde);
echo "</pre>";

?>

Die Ausgabe im Browser sieht so aus:

Man kann für die Ausgabe var_dump oder auf var_export verwenden:

var_dump($kunde);

Im Browser würde es so ausschauen:

Mehrdimensionale Arrays (ASSOZIATIV)

Der Aufbau eines assoziativen Arrays könnte man sich so vorstellen:

Einen mehrdimensionalen assoziativen Array anlegen und ausgeben:

// ein mehrdimensionaler assoziativer Array wird angelegt

$staat = array
(
"Deutschland" => array ("Sprache" => "Deutsch",
"Hauptstadt" => "Berlin",
"Waehrung" => "Euro"
),
"Russland" => array ("Sprache" => "Russisch",
"Hauptstadt" => "Moskau",
"Waehrung" => "Rubel"
),
"Spanien" => array ("Sprache" => "Spanisch",
"Hauptstadt" => "Madrid",
"Waehrung" => "Euro"
)
);

// Ausgabe zu Russland ausgeben
echo "<h1>Russland:</h1>";
echo "Sprache: " . $staat["Russland"]["Sprache"] . "<br>";
echo "Hauptstadt: " . $staat["Russland"]["Hauptstadt"] . "<br>";
echo "Währung: " . $staat["Russland"]["Waehrung"] . "<br>";

// Ausgabe mt var_dump
echo "<hr><br><b>mit var_dump anzeigen: </b>";
var_dump($staat);

Im Internetbrowser erscheint es so:

Einen mehrdimensionaler assoziativer Array in einer Tabelle ausgeben:

echo "<table border='1'>";

echo "<tr>";
echo "<th width='140'>Land</th>"; 
echo "<th width='140'>Sprache</th>"; 
echo "<th width='140'>Hauptstadt</th>";
echo "<th width='140'>Währung</th>";
echo "</tr>";

$staat = array (
"Deutschland" => array ("Deutsch", "Berlin", "Euro"),
"Russland" => array ("Russisch", "Moskau", "Rubel"),
"Spanien" => array ("Spanisch", "Madrid", "Euro")
);

foreach ($staat as $key => $ausgeben) {
list ($sprache, $hauptstadt, $waehrung) = $ausgeben;
echo "<tr>";
echo "<td>" . $key . "</td>";
echo "<td>" . $sprache . "</td>";
echo "<td>" . $hauptstadt . "</td>";
echo "<td>" . $waehrung . "</td>";
echo "</tr>"; 
}

echo "</table>";

Die Ausgabe der Tabelle im Internetbrowser sollte so dargestellt werden:

Hier  haben wir auf bereits oben erwähnte Elemente zurückgegriffen, bis auf die Funktion list ().

Model View Controller (MVC)

MODEL VIEW CONTROLLER (MVC)

Beim MVC handelt es sich um ein Pattern in der Softwareentwicklung. Die einzelnen Schichten (Datenmodell, Programmierlogik und Layout) werden voneinander getrennt.  Dieses Prinzip ist übersichtlicher und wartungsfreundlicher, da eine Entkopplung der Bereiche stattfindet.

Model

Die kompletten Daten (inkl. Applikations- und Zustandslogik) werden im Model platziert. Diese Schicht dient als Schnittstelle zum Controller und View.

View

Ist für die Darstellung der Daten des Models zuständig. Die Daten können dabei beim Model abgefragt werden.

Controller

Die Interaktionen des Benutzers werden vom Controller an Model oder View weitergeleitet.

Smarty – Template Engine

SMARTY  – TEMPLATE ENGINE

Bei Smarty handelt es sich um eine Template Engine für PHP, womit man die Programmlogik und das Design voneinander trennen kann. Bei größeren Projekten, wo der Designer und der Programmierer nicht die gleiche Person ist,  kann man mit Smarty eine „Schnittstelle“ schaffen und die Projekte besser koordinieren. Smarty ermöglicht ein gleichzeitiges Arbeiten, was die Effizienz langfristig steigert wird. Es werden dabei Template-Dateien (HTML) mit Variablen/Klasseneigenschaften hinterlegt, die dann durch Smarty ersetzt.

Ich werde das Thema auch hier nur ganz grob behandeln. Mir geht es hauptsächlich nur darum, mir ein Verständnis für diese Thematik zu erarbeiten, damit ich den Aufbau einiger Systeme besser verstehen kann. Ich setze bei  diesem Tutorial voraus, dass man sich etwas mit der Programmierung, insbesondere PHP und der objektorientierten Programmierung (OOP)  auskennt.

1.] Zum Testen habe ich von der Smarty-Webseite den Zip-Ordner heruntergeladen und diesen auf meinem Webserver (entzippt) abgelegt.

2.]  In den Ordner „Demo“, der bereits im Download enthalten ist, lege eine Datei haus.php mit folgendem Code an:

<?PHP
	
  class haus
  {

	public $baujahr = "1925";
	public $flaeche_qm = "135";
	public $etagen = "3";
	public $anschrift = "Fifth Avenue 5, 12345 New York";
	public $webseitentitel = "Hausdaten";
	
  }
	
?>

3.] Ich lege eine Template-Datei mit dem Namen hausdaten.tpl an, wo ich das Grundgerüst einer Webseite hinterlege und die Eigenschaften aus der Klasse eininde. Die Variable $haus ist die zugewiesene Variable (assign) aus der darauffolgenden Datei meinhaus.php

<html>
  <head>
   <title>{$haus->webseitentitel}</title>
  </head>
   <body>
    <h1>Adresse: {$haus->anschrift} </h1>			
    <p>Hausbaujahr: {$haus->baujahr} <br> Hausfläche: {$haus->flaeche_qm} <br> Etagen:{$haus->etagen}</p>		
   </body>
</html>

4.] Die folgende Seite Datei meinhaus.php (die auch später vom Internetbrowser aufgerufen wird) bekommt folgenden Programmcode:

<?PHP

// Klassen-Einbindung
require('../libs/Smarty.class.php');
require('haus.php');

// Klassen Smarty und Haus werden instanziiert 
$smarty = new Smarty();
$haus = new haus();

/* mit assign wird die Variable $haus zugewiesen
 und display wird die Seite angezeigt */
$smarty->assign("haus",$haus);
$smarty->display('hausdaten.tpl');


?>

Weitere Informartionen zum Zuweisen von Werten mit Smart hier.

Wenn man die Seite meinhaus.php aufruft, sollte folgendes angezeigt werden:

In der folgenden Grafik, zugegebenermaßen habe ich mir wenig Mühe dafür gegeben, der einfache und grundlegende Aufbau:

Berechtigterweise kommen an dieser Stelle Fragen zu der Performance auf, wenn man einen derartigen Aufbau hat. Darüber haben sich die Entwickler auch Gedanken gemacht und das mit einem Caching etwas optimiert. Die Seite wird einmal erstellt und für einen temporären Zeitraum zwischengespeichert. Dazu werden in der meinhaus.php folgende Befehle eingebaut:

$smarty->caching = true;
$smarty->cache_lifetime = 120; //Sekunden

Man kann das Debugging mit diesem Befehl aktivieren:

$smarty->debugging = true;

Objektorientierte Programmierung (OOP)

OBJEKTORIENTIERTE PROGRAMMIERUNG (OOP)

Für den Anfänger würde ich die OOP nicht empfehlen. Um ein Gefühl für die Programmierung zu bekommen, würde ich die „klassische“ Programmierung (prozedurale) vorerst bevorzugen. Bei der prozedurale Programmierung wird – etwas überspitzt formuliert – der Code einfach von oben nach unten Schrittweise abgearbeitet. Das kann aber bei größeren Projekten schnell unübersichtlich werden. Im professionellen Umfeld bzw. bei größeren Projekten wird man daher langfristig an der OOP nicht vorbeikommen. Die Vorteile der OOP werden auch erst bei größeren Programmierprojekten sichtbar. Es vereinfacht insgesamt die Wartung und Erweiterungen von Programmen.

Die OOP geht von der Annahme aus, dass alle realen Dinge Objekte sind, die sich klassifizieren lassen mit ihren Interaktionen. Diese sollen im Programm abgebildet werden. PHP ist auch eine der Sprachen, die es erlaubt, in Klassen und Objekten zu denken. Klassen sind Objekte identischer Art. Alle Objekte/Instanzen einer Klasse haben dabei die gleichen Eigenschaften. Die Ausprägungen der Eigenschaften variieren nur. Unterklassen können von der übergeordneten Klasse Eigenschaften erben.

Um das etwas zu veranschaulichen, nehmen wir uns als Vorlage das Haus.  Ein Haus könnte folgende Eigenschaften/Attribute (auch Member genannt) haben:

  • Fläche in qm
  • Anzahl der Zimmer
  • Anzahl Fenster
  • Etagen
  • Baujahr

Dann gibt es noch die Methoden/ Funktionen. Damit können den Objekten Funktionalität mitgegeben werden. Diese könnten im Beispiel Haus folgende sein:

  • Renovierung
  • Verkauf
  • Abriss

Was sind Klassen?

Klassen sind der Aufbau eines Objektes. Man kann es als Bauplan eines Objektes sehen. In der Klasse definiert man noch keine Werte/Inhalte fest, sondern nur die Eigenschaften/Attribute (salopp Variablen) und Methoden (salopp Funktionen/Fähigkeiten), die z.B. ein Haus haben soll.

Als weiteres Beispiel könnte man auch ein Auto nehmen. So könnte man aus der Klasse ein Objekt machen: Objektname = VW, Eigenschaft Farbe = blau und Fähigkeit Beschleunigung = rasant.

Die Eigenschaften und Methoden – z.B. „Fläche in qm“ oder Renovierung werden auch Member genannt.

Vererbung

Einige Klassen bauen auf andere Klassen auf und nehmen daher schon gewisse Eigenschaften und Methoden mit.

Konstruktor

Ist eine Methode, die bereits beim Instanziieren aufgerufen wird.

Instanz:  Instanziieren sind nur gleichbedeutend mit Objekten
Instanziierung:  Erstellen einer Instanz / ein Objekt der Klasse. In unserem Beispiel bedeutet Instanziierung den Bau eines Hauses.


Klassen in PHP

 

In den beiden folgenden PHP-Dateien habe ich das Prinzip etwas detaillierter beschrieben.

Hund.php

<?php

 // Namen einer Klassen müssen mit Buchstanden oder einem Unterstrich (_) angfangen

  class Hund 
  {
		
   /* jede Eigenschaft ist dann gültig, wenn Sie mit einem Schlüsselwort versehen 
   ist - private, protected oder public. Damit wird die Art und Weise deutlich
   gemacht, wie man auf diese Elemente zugreifen kann. Man spricht hierbei auch von
   der Sichtbarkeit/Verkapselung von den Eigenschaften und Methoden. 

   public: Zugriff von überall möglich (aber auch von überall veränderbar). Wird oft
   bei Interfaces zu anderen Klassen eingesetzt.

   private: Nur innerhalb der Klasse zugreifen möglich

   protected: Innerhalb der Klasse und die Kindklassen (Vererbung) können auf dieses Element zugreifen		

   Es ist üblich, den Eigenschaftennamen 
   klein zu schreiben, um diesen von dem Klassennamen besser zu unterscheiden
   */
		
   // Rasse
   public $familie;
   // Namen
   public $hundName1;  	
   public $hundName2; 
   // Alter
   protected $age = 1; 	// direkte Initialisierung einer Eigenschaft möglich			
   // Besitzer
   private $besitzerID;
   private $besitzerVorname;	
   private $besitzerName;
	
   // Eine Methode ist nicht anderes als eine Funktion. Eine Funktion innerhalb einer Klasse
   // Ausgabe in HTML

   function showMe ()
    {
		
   $out = '';
		
   /* Mit der Pseudoklasse $this kann man innerhalb auf die klasseninternen 
   Eigenschaften zurückgreifen	*/
		
   $out .= $this->hundName1; //OHNE DOLLARZEICHEN!
		
   $out .= '<br>';
   $out .= 'ist ein ' .$this->familie;
		
   return $out;
			
    }			
   }

?>

Weiteres Beispiel mit einem PKW:


Man kann mit den folgenden Befehl auch direkt eine Eigenschaft des Objektes aufrufen:

echo $pkw_1->kraftstoff;

Diese PHP-Datei greift mit dem Befehl „require“ auf die Hund.php:

<?php

// Klasse-Einbindung
require 'Hund.php';

// Klasse "Hund" wird instanziiert bzw. erzeugt.
echo "INSTANZIIEREN <br>";
$hund = new Hund;

echo "leeres Objekt abzeigen:<br><br>";
/* var_export() liefert strukturierte Informationen zum Inhalt der übergebenen Variable. 
Das Verhalten ist ähnlich dem der var_dump(), allerdings ist hier das Ergebnis valider PHP-Code 
mit dem sich der Inhalt der Variable wieder herstellen lässt. */
echo "<b><pre>" . var_export ($hund, TRUE) . "</pre></b>";

//Werte zuweisen

echo "Werte zuweisen und anzeigen:<br><br>";

$hund->hundName1 = "Bello";
$hund->hundName2 = "Buddy"; 
$hund->familie = "Dackel";

echo "<b><pre>" . var_export ($hund, TRUE) . "</pre></b>";


// Methode ausgeben lassen
echo "Anzeigen der Werte<br><br>";

echo $hund->showMe(); //Mit der function ShowMe wird die Funktion ausgegeben


?>

Der Browser sollte folgendes anzeigen:

Ich habe den Code etwas schlanker gemacht und in der folgenden Datei (inkl. Ausgabe im Internetbrowser) in eine Übersicht gepackt:

Weiteres Beispiel (Webseiten generieren):

<?php

class Webseiten
{


function neueSeite() 
{

echo "<html><title>Hallo</title><body>";

echo "<h2>"; 
echo $this -> Ueberschrift;
echo "</h2>"; 

echo $this -> MeinInhalt;

echo "</body></html>";

}


}

$Webseiten1 = new Webseiten;

$Webseiten1-> Ueberschrift = "Meine Überschrift";

$Webseiten1-> MeinInhalt = "Was soll das?";

$Webseiten1-> neueSeite();

?>

Webseite wurde erzeugt:

is_object

Mit is_object kann man überprüfen, ob es sich um ein Objekt handelt:

// Typ prüfen
if (is_object($hund))
	echo "<b>Das ist ein Objekt!</b><br><br>";
Objekt-Vererbung

Unterklassen können von der übergeordneten Klasse Eigenschaften erben. Das erfolgt mi dem Schlüsselbegriff extends:

class unterklasse extends uebergeordneteKlasse

{

public function xyz....

    {

    echo "xzy..."

    }

}

 

 

 

IDE CodeLobster mit XDebug einrichten

EINRICHTUNG DEBUGGER XDEBUG FÜR DIE IDE CODELOBSTER

Die php.ini muss um den folgenden Code ergänzt werden:

zend_extension = C:\xampp\php\ext\php_xdebug-2.9.4-7.2-vc15-x86_64.dll 
xdebug.remote_host = localhost 
xdebug.remote_port = 9000 
xdebug.max_nesting_level = 256 
xdebug.remote_handler = dbgp 
xdebug.remote_autostart = 1
xdebug.remote_enable = 1

Hier kann man sich die aktuelle Version des XDebug herunterladen:
https://xdebug.org/download

Bei „zend_extension = C:\xampp\php\ext\php_xdebug-2.9.4-7.2-vc15-x86_64.dll“ auf die  genaue Version achten.

EINSTELLUNGEN IM CODELOBSTER (v. 1.8.0):

 

Vorherige Versionen:

Nach einem Neustart des Servers sollte das Debuggen möglich sein.

Man kann Haltepunkte setzen und mit F10 Einzelschritte im Code machen.
TESTEN

 

Eine PHP-Seite, z.B. mit dem folgenden Code, auf dem Webserver ablegen bzw. im Browser aufrufen:

<?php

print(phpinfo (INFO_ALL));

?>

OXID eShop umziehen

OXID ESHOP UMZIEHEN

In der folgenden Anleitung wird beschrieben, wie ein Server- und Domainumzug durchgeführt wird. Die verwende Version ist hierbei die Community Edition 6.1.3.

1.] Der Shop muss deaktiviert werden. Im Adminbereich zu „Stammdaten“ > „Grundeinstellungen“ die entsprechenden Optionsfelder deaktivieren und den Button „Speichern“ betätigen.
DATENBANK EXPORTIEREN
2.] Die Datenbank exportieren: Die oxv_ sind die Views und dürfen nicht mitgenommen werden bzw. müssen diese später beim Import in der neuen Datenbank gelöscht (bei Auswahl von „Schnell – nur notwendige Optionen anzeigen) werden. Es werden auch u.a. alle Benutzer mit Passwörtern übernommen.
DATENBANK IMPORTIEREN
3.] Datenbank importieren auf dem neuen Server.

Sollte nach der Importierung der sql-Datei folgende Fehlermeldung kommen:

CREATE ALGORITHM=UNDEFINED DEFINER=xxxxx-ad@localhost SQL SECURITY INVOKER VIEW oxv_oxactions AS select … #1227 - Kein Zugriff. Hierfür wird die Berechtigung SUPER benötigt

Könnte das an den Privilegien des Datenbank-Users liegen. Das machen einige Webhoster, um die Kunden evtl. zu einem höherwertigen Paket zu bewegen. Zu mindestens hat mein Webhoster mir das als Hilfestellung angeboten.

Man kann das folgendermaßen Umgehen: in dem SQL-Export

DEFINER='xxxxx-ad@localhost' 

ersetzen mit

DEFINER=CURRENT_USER
4.] beim Import ggf. „Import abbrechen, wenn die maximale PHP-Scriptlaufzeit erreicht wird. (Damit ist es möglich, große Dateien zu importieren, allerdings kann es Transaktionen zerstören.)“ deaktivieren.
Der Import war erfolgreich.
4.2] Hat man den Datenbank-Cache (beginnt mit oxv_) mitgenommen, dann muss dieser spätestens jetzt gelöscht werden. Dazu die entsprechenden Zeilen anklicken und „Löschen“ (da wo defaultmäßig „markierte“ steht) auswählen. Anschließend mit „JA“ bestätigen.
DATEN VOM ALTEN ZUM NEUEN FTP-SERVER ÜBERTRAGEN

Hierbei ist es wichtig, dass die Daten binär übertragen werden.

5.] In FileZilla ist das unter der Registerkarte „Übertragung“ > „Übertragungstyp“ zu finden.

Dieser Vorgang kann, abhängig vom Umfang des Projektes, etwas Zeit in Anspruch nehmen. Sind die Daten erfolgreich – binär – übertragen auf den neuen Server, dann müssen folgende Einstellungen vorgenommen werden:

Der Inhalt des Ordners „tmp“ unter „source“ muss gelöscht werden. Diese Ordner müssen die Berechtigung 777 oder 775 (auch die Unterordner) erhalten:

/out/pictures
/out/media
/log
/export
/tmp

6.] Dateiattribute der o.g. Ordner im FTP-Programm ändern.
7. Die Datei config.inc.php (im Ordner „source“) muss entsprechend mit den eigenen Daten angepasst werden.

Um den Pfad zu ermitteln, kann die folgende php-Datei

7.2] Zeigt die Serverdaten an, wenn man diesen Code-Schnipsel in eine .php-Datei schreibt und auf dem Server ablegt bzw. über die URL aufruft.

Es muss ggf. in der .htacces der Punkt „RewriteBase“ angepasst werden.

8.] Im Adminbereich die Views aktualisieren.
9.] Den Shop wieder aktivieren bzw. wieder in den Produktivmodus versetzen.

.htaccess und config.inc.php bekommen erst nach der Installation die Berechtigung auf 444.

10.] Unter „Home“ > „Systemgesundheit“ hat man eine Übersicht über die Installation.
  • „memory_limit“ kann per .htaccess hochgesetzt werden mit dem folgenden Befehl: php_value php_memory_limit xxx.
  • Die „Option session. auto_start“ ebenfalls per .htaccess mit dem Eintrag: php_value session. auto_start x .
  • „allow_url_fopen“ und „Apache server variables REQUEST_URI or SCRIPT_URI must be available“ kann der Webhoster-Support aktivieren.
FEHLER-FAQ

Der Wartungsmodus lässt sich nicht deaktivieren und es kommt immer die Meldung „Maintenance mode, please try again later.“:

In der config.inc.php muss  „$this->blSkipViewUsage“ auf „true“ gesetzt werden.

 

CSS: Text um/am Bild

TEXT UM/AM BILD (BLOCKSATZ)

Möchte man ein Bild um einen Text (mit einem Abstand) erstellen, kann man das auf die folgende Art machen:

.Text
{

position:relative; 
color:#333;
font-size:22px;
font-weight:400;
letter-spacing:1px;
margin-left: auto;
margin-right: auto;
padding-left: 25%;
padding-right: 25%;
text-align:justify;

}

.bild
{
	position:relative;
	float:left;
	margin-right:30px;
}

WordPress: Seitentemplate erstellen

WORDPRESS: SEITENTEMPLATE ERSTELLEN

Möchte man z.B. die Unterseiten anders haben, als die Startseite, dann muss mal folgendes machen:

1.] Man macht eine Kopie von der page.php, die sich im entsprechenden „Theme“ befindet. Ich habe das neue Template page_sub.php genannt

 

2.] In „page_sub.php“ fügt man den oben angezeigten Kommentar ein

 

3.] Wenn man eine neue Seite anlegt bzw. eine vorhandene bearbeitet, dann hat man unter den „Seiten-Attributen“ das entsprechende Template „Unterseite“
Änderungen im Layout vornehmen vom erstellten Template
Man könnte jetzt in der page_sub.php Änpassungen vornehmen. Zum Demonstrieren des Prinzips ändere ich die Werte von der DIV-Klasse „page-module-content module“ in „page-module-content module2“ ab.
In der style.min.css habe ich die Werte für die DIV-Klasse abgeändert, nachdem ich es kopiert habe. Diese Änderung ist jetzt nur für die page_sub.php bzw. das Template „Unterseiten“ gültig.

 

 

 

 

Raspberry PI-Remote: Dateien und Ordner mit WinSCP (FTP-Client) verschieben, bearbeiten, löschen etc.

DATEIEN UND ORDNER MIT WINSCP (FTP-CLIENT) VERSCHIEBEN, BEARBEITEN, LÖSCHEN ETC.

Unter „Einstellungen“ -> „Rasperry-Pi-Konfiguration“ -> „SSH“ auf „Aktiviert“ stellen.

Für den Remotezugang muss SSH aktiviert werden.
Mit WinSCP kann man per Remote Dateien und Ordner systemübergeifend verschieben.

Verwandte Themen: