The Enterprise CMS

You can use Wallpage as a CMS for large portals, in that Business logic and presentation. With Wallpage you can easily have a 20 language website With each page having a very individual layout. The editing of the layouts and the language can be found directly on the Website instead of complicated programs. Each editor can create a page using a clone of the web page Via versioning programs such as GIT on the LIVE website. As a result, the editor can not destroy anything on the LIVE- Website. Should the Internet portal be hacked, If the website is created using a versioning program (GIT) in Few minutes restored, So the website is protected again from hackers and external Manipulations. Use Wallpage together with Typo3, Magento or Wordpress by You make your old CMS to a slave system from Wallpage.

Separation of business logic and presentation


Wallpage is a presentation management system. This means that Wallpage only takes care of the presentation of the website. Content and dynamic programs will be similar to a Youtube video Services. This means, for example, that the Aritkel with a classic CMS Such as WordPress or Typo3 are created and have a rest API as a service on a Wallpage.

Hacking securely with the help of GIT

Wallpage has no database and each website is in an extra Folder Together with all individual adjustments and revisions of The respective layout framework (images, HTML, CSS, PHP). Many programs on the Internet are programmed quickly and actually not sure. The customer often only looks at the layout. The versioning program (GIT) can be any manipulation of the web page Undo minutes, because Wallpage does not need a database.

Use wallpage for large web page projects

All individual settings of a single web page will be directly Where they are also displayed. The Wallpage program Has a simple and very clear system structure. Through this fixed standard can be without problems Internet portals with Over 1000 individual pages. Even after 10 years parts of the internet portal can be replaced, Without having to renew the entire performance. Any page of Wallpage could also be in other version of the program Wallpage run as the rest of the Internet portal, by packing Of the versions.

The 20 language website

Wallpage puts in each folder of a single web page Individual folders for translations. You can translate a webpage directly to the website Translate and edit. This simple concept of a simple program is no longer necessary Extensive editorial training courses for complex layout programs.

Use wallpage together with Typo3, Magento or WordPress

Wallpage can be easily combined with other systems. Wallpage hacking the old CMS to itself and calling the old website from the Old system if no wallpage is found. So Wallpage becomes the master and redirects to the old website, Without knowing what system it is.

Das Enterprise CMS

Sie können Wallpage als CMS für große Portale benutzen, weil
Geschäftslogik und Darstellung konsequent getrennt werden.
Mit Wallpage können Sie ohne Probleme eine 20ig-sprachige Webseite
Erstellen, bei der jede Seite ein sehr individuelles Layout hat.
Die Bearbeitung der Layouts und der Sprache finden direkt auf der
Webseite statt, ohne komplizierte Programme.
Jeder Redakteur kann über ein Clone der Webseite eine Seite erstellen und
über Versionierungsprogramme wie GIT auf der LIVE- eine Webseite veröffentlichen.
Dadurch kann der Redakteur auf der LIVE- Webseite nichts mehr kaputt machen
. Sollte das Internet-Portal gehackt werden,
wird die Webseite mit Hilfe eines Versionierungs-Programms (GIT) in
wenigen Minuten wieder hergestellt,
damit die Webseite wieder vor Hackern und externen
Manipulationen geschützt ist.
Benutzen Sie Wallpage zusammen mit Typo3, Magento oder Wordpress, indem
Sie Ihre alte CMS zu einem Slave-System von Wallpage machen.

Trennung von Geschäftslogik und Darstellung


Wallpage ist eine Präsentations-Management-System. Dies bedeutet, dass
sich Wallpage nur um die Darstellung der Webseite kümmert.
Inhalte und dynamische Programme werden ähnlich wie ein Youtube-Video
über Services eingebunden.
Dies bedeutet zum Beispiel, dass die Artikel mit einem klassischen CMS
wie WordPress oder
Typo3 erstellt und über eine Rest-API als Service auf einer
Wallpage dargestellt werden.

Hacking sicher mit der Hilfe von GIT

Wallpage hat keine Datenbank, und jede Webseite wird in einem extra
Ordner gespeichert,
zusammen mit allen individuellen Anpassungen und Überschreibungen des jeweiligen Layout-Grundgerüsts (Bilder,HTML,CSS,PHP).
Viele Programme im Internet sind schnell programmiert und eigentlich
nicht sicher. Der Kunde achtet oft nur auf das Layout.
Das Versionierungs-Programm (GIT) kann jede Manipulation der Webseite in
Minuten wieder rückgängig machen, da Wallpage keine Datenbank benötigt.

Wallpage für große Webseiten Projekte verwenden

Alle individuellen Einstellungen einer einzelnen Webseite werden direkt
dort gespeichert, wo sie auch angezeigt werden. Das Wallpage-Programm
hat eine einfache und sehr übersichtliche Systemstruktur.
Durch diesen festen Standard können ohne Probleme Internet-Portale mit
über 1000 individuellen Seiten entstehen.
Auch nach 10 Jahren können Teile des Internet-Portals ersetzt werden,
ohne dass der komplette Auftritt erneuert werden muss.
Jede Seite von Wallpage kann auch in anderen Version des Programms
Wallpage laufen, als der Rest des Internet-Portals, durch das Packing
der Versionen.

Die 20 sprachige Webseite

Wallpage legt in jedem Ordner einer einzelnen Webseite einen
individuellen Ordner für Übersetzungen an.
Zum Übersetzen einer Webseite kann man direkt auf der Webseite den zu
übersetzenden Teil anklicken und editieren.
Durch dieses einfache Konzept eines einfachen Programms entfallen
umfangreiche Redakteuers-Schulungen für komplizierte Layout-Programme.

Wallpage zusammen mit Typo3, Magento oder WordPress benutzen

Wallpage kann man leicht mit anderen Systemen zusammen verwenden.
Wallpage hackt das alte CMS bei sich ein und ruft die alte Webseite vom
alten System auf, falls keine Wallpage gefunden wird.
Wallpage wird also zum Master und leitet auf die alte Webseite weiter,
ohne dass man erkennen kann, um welches System sich es handelt.

Philosophie & Konzept

Wallpage ist ein kleines schlankes Theme & Applikationen orientiertes CMS für die schnelle Erstellung von Page-Speed optimierten mehrsprachigen Onepage-Webseiten und Präsentations-Webseiten. Klassische Content-Management-Systeme für die Content-Verwaltung gibt es viele. Wallpage ist darauf ausgerichtet, Inhalte darzustellen und ist damit eher ein Präsentations-Managment-System (PMS). Wenn man ein Artikel-Verwaltungs-System benötigt, kann man inzwischen ganz leicht über die Rest-Api Inhalte auslesen von Wordpress oder Typo3 und auf Wallpage darstellen. Dadurch wird die Darstellung konsequent vom Inhalt getrennt. Für eine neue Webseite mit einem neuen Design entfällt dadurch das aufwendige Importieren von Inhalten der alten Webseite.

Nur das Wichtigste!

Wallpage ist ein schlankes System zur Erzeugung von dynamsichen Webseiten und keine klassische eierlegende Wollmilchsau. Ziel ist es Wallpage intelligent zusammen mit Frameworks und klassischen Content-Management-Systemen zu verwenden. Dadurch soll Wallpage selbst ein schlankes und elegantes System bleiben und nicht unnötig komplex werden.

  • Trennung von Darstellung und Server-Programm
  • Mehrsprachigkeit, Update-Sicherheit
  • Einfache Überschreibung von Schnittstellen und Programmen ohne komplizierte OOP-Vererbung
  • Einfache Caching-Engine für performante dynamische Web-Applikationen
  • Add-On Widget-Tags (dynamische Programme) können überall im HTML platziert werden
  • Frontend-Bearbeitung macht es einem leichter, sich bei der Bearbeitung der Webseite zu orientieren

Caching & Performance

Moderne Webseiten müssen schnell sein und kommen an dem Thema Caching & Performance nicht vorbei.
Gleichzeitig sollen diese Webseiten dynamische Programme sein, welche sich ständig verändern können. Das klappt nur, wenn man das Grundgerüst der erzeugten Webseite zwischenspeichert und die Teile mit den dynamischen Programmen ständig wieder verändern kann. Damit diese dynamischen Programme auch
performant bleiben, macht es Sinn, identischen Inhalt nicht jedesmal neu zu erzeugen und diesen in einem Sub-Cache zwischen zu speichern. Wallpage bietet eine einfache Caching-Engine mit Sub-Caching und ist kein kompliziertes abstraktes Framework, was die Optimierung aufwendig und teuer macht.

MVC-Frameworks Contra

  • Hoher Lernaufwand
  • Macht Content-Management-Systeme unnötig komplex, wenn das MVC-Framework im Kern-System verbaut ist
  • Schlechte-Performance & hohe Performance-Optimierungs-Kosten
  • Teure Entwickler

MVC-Frameworks Pro

  • Sinnvoll für die Entwicklung von großen Plugins mit vielen Daten und Aktionen
  • Konstanter Programmierstandard, wenn viele Entwickler ohne technischen Konzepter an einem Projekt arbeiten
  • Für größere Applikationen macht es Sinn, Wallpage zusammen mit einem PHP-Framework zu benutzten

Warum habe ich Wallpage entwickelt?

Ich habe über 10 Jahre Erfahrung im Bereich Web-Entwicklung und ich habe tiefgreifendes Wissen über den Aufbau und das Konzept von klassichen Content-Managment-Systemen (CMS) wie WordPress, Joomla, Typo3 und Drupal gesammelt. Diese Systeme wurden als All-In-One Lösung entwickelt. Mit jedem der Systeme kann man fast „alles“ umsetzen. Aber „alles“ bedeutet auch, dass diese Systeme seit über 10 Jahren immer komplizierter geworden sind.
Nebenbei eine Webseite erstellen funktioniert mit dem klassischen CMS nicht, weil diese für die
Verwaltung von Inhalten konzipiert worden sind, als es noch kein Facebook, Youtube oder
Flickr gab, welche heute den Inhalt im Internet liefern. Inhalt wird inzwischen über das Netzwerk geliefert und nicht mehr über ein geschlossenes CMS.
Die Stärken eines klassischen CMS liegen eindeutig in der Verwaltung von Inhalten.
Für mich selbst oder für Freunde auf die Schnelle eine Webseite aufsetzen empfand ich trotz tiefgreifender Erfahrung viel zu aufwendig. Technisch empfinde ich das klassische CMS zeit- und pflege-intensiv. Mit einem klassischen CMS hat man automatisch auch ganz viel Ballast mit zusätzlichen Programmen, welche man oft nicht benötigt.
Individuelle Änderungen am System oder eigene Programme mit so groß gewachsenen und komplexen System
umzusetzen, ist mir persönlich zu umständlich. Das Kern-System umzuprogrammieren ohne das Kern-System zu verändern, wird bei komplexen Systemen sehr aufwendig und benötigt immer Experten-Wissen.
Heutzutage müssen Systeme immer auf dem aktuellsten Stand im Internet sein, damit diese
vor automatisierten Angriffen geschützt sind. Komplexe-Systeme machen eine Internet-Anwendung nicht sicherer, weil diese für den Pflegebedarf viel Zeit benötigen.

Design- und Agentur-Vorlagen

Wallpage bietet die Möglichkeit, Dateien zu überschreiben, ohne diese zu löschen, weil die Pages (Webseiten) in 3 unterschiedliche Pakete unterteilt sind.
Als Standard-Paket gibt es das „default.package„. Hier sind alle wichtigen Seiten und Design-Vorlagen, die von Wallpage mitgeliefert werde.
Als nächstes Paket gibt es das „modify.package„.Hier können Sie einzelne Dateien vom “
default.package“ überschreiben, indem Sie diese in einen Page-Ordner mit gleichen Namen hinterlegen. Als letztes Paket gibt es den Benutzer-Ordner „page„. Hier legt der Benutzer seine einzelnen Webseiten an und verändert das Theme nach seinen Wünschen.
Durch diesen Aufbau können Themes und Seiten mit ihren Eigenschaften überschrieben werde, ohne ein Paket-Verzeichnis zu verändern.
Außerdem können Sie mehrere Templates und Theme-Designs gleichzeitig mit einer Installation verwenden.
Im „modify.package“ werden Agentur-Themes und -Templates installiert. Eine Page/ Template erbt immer die Design-Templates von dem Theme und kann die Theme-Eigenschaften individuell auf jeder Seite
überschreiben.

  • Überschrieben werden können vom Theme die Dateien: template.html, script.css, style.css und die Snippets
  • Eine „Page“ erbt die Dateien des „default.package“ und „modify.package„.
  • „Page“ – Inhalte können immer nur die „Default“-Daten überschreiben oder die globalen Konfigurations-Daten.

Was FlatFile-CMS Systeme nicht können!

FlatFile-CMS Systeme sind keine Datenbanksysteme. Datenbanksysteme verwalten wie in einer Excel-Tabelle Inhalte nummeriert nach der Zeilennummer. Text- & Produkt-Artikelverwaltungsprogramme benötigen Datenbanken. Diese Datenbanken kann man über die Rest-Api leicht auslesen in Wallpage. Wallpage muss das Rad nicht neu erfinden für Systeme, welche es bereits gibt. Dadurch bleibt Wallpage ein schlankes System für
die reine Darstellung von Inhalten.

Was Wallpage nicht ist!

  • Wallpage ist kein klassisches CMS
  • Wallpage ist kein Framework

Article 2 from WordPress

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Lorem ipsum dolor Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Lorem ipsum dolor Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

facebook-login-javascript

window.fbAsyncInit = function() {
    FB.init({
        appId      : '185972185972',
        cookie     : true,
        xfbml      : true,  
        version    : 'v2.8' 
    });
    FB.getLoginStatus(function(response) {
        FBstatusChangeCallback(response);
    });
};

(function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

function FBstatusChangeCallback(response) {
    if (response.status === 'connected') {
        FBresponseFromGraph(response.authResponse.accessToken);
    } else {
        document.getElementById('FBerror').innerHTML =  'not connected';
    }
}

function FBcheckFacebookLoginState() {
    FB.getLoginStatus(function(response) {
        FBstatusChangeCallback(response);
    });
}

function FBresponseFromGraph(accessToken) {
	document.getElementById('accessToken').value =  accessToken;
    FB.api('/me?fields=id,email,first_name,last_name', function(response) {
        document.getElementById('first_name').value =  response.first_name;
        document.getElementById('last_name').value =  response.last_name;
        document.getElementById('email').value =  response.email;        
    });
}
<fb:login-button scope="public_profile,email" onlogin="FBcheckFacebookLoginState();">
</fb:login-button>
<div id="accessToken"></div>
<div id="first_name"></div>
<div id="last_name"></div>
<div id="email"></div>
<div id="FBerror"></div>

Facebook Login PHP

config.php

/*
 * FACEBOOK-LOGIN-SETUP
 * https://developers.facebook.com/docs/graph-api/reference/user
 * APP-ID on https://developers.facebook.com/apps/
 * 1. Create a new FB-APP
 * 2. GET the app_id & app_secret
 * 3. ADD Plattform => set Domain for LOGIN
 */
$config = array();
// App-ID
$config['facebook']['app_id'] = '1s59724s57582812';
$config['facebook']['app_secret'] = 'f302eabf302eabf302eabf302eab';
$config['facebook']['callpack_url'] = 'http://login.infochy.de/callback.php';

login.php

require_once 'config.php';
session_start() ;
require_once __DIR__ . '/vendor/php-graph-sdk-5.0.0/src/Facebook/autoload.php';

$fb = new Facebook\Facebook([
'app_id' => $config['facebook']['app_id'], 
'app_secret' => $config['facebook']['app_secret'],
'default_graph_version' => 'v2.2',
]);

$helper = $fb->getRedirectLoginHelper();

$permissions = ['email']; // Optional permissions
$loginUrl = $helper->getLoginUrl($config['facebook']['callpack_url'], $permissions);

echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>';

callback.php

require_once 'config.php';
session_start() ;
require_once __DIR__ . '/vendor/php-graph-sdk-5.0.0/src/Facebook/autoload.php';

$fb = new Facebook\Facebook([
    'app_id' => $config['facebook']['app_id'], // Replace {app-id} with your app id
    'app_secret' => $config['facebook']['app_secret'],
    'default_graph_version' => 'v2.2',
]);

$helper = $fb->getRedirectLoginHelper();

try {
    $accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
}

if (! isset($accessToken)) {
    if ($helper->getError()) {
        header('HTTP/1.0 401 Unauthorized');
        echo "Error: " . $helper->getError() . "\n";
        echo "Error Code: " . $helper->getErrorCode() . "\n";
        echo "Error Reason: " . $helper->getErrorReason() . "\n";
        echo "Error Description: " . $helper->getErrorDescription() . "\n";
    } else {
        header('HTTP/1.0 400 Bad Request');
        echo 'Bad request';
    }
    exit;
}

// Logged in
echo '<h3>Access Token</h3>';
var_dump($accessToken->getValue());

// The OAuth 2.0 client handler helps us manage access tokens
$oAuth2Client = $fb->getOAuth2Client();

// Get the access token metadata from /debug_token
$tokenMetadata = $oAuth2Client->debugToken($accessToken);
echo '<h3>Metadata</h3>';
var_dump($tokenMetadata);

// Validation (these will throw FacebookSDKException's when they fail)
$tokenMetadata->validateAppId($config['facebook']['app_id']); // Replace {app-id} with your app id
// If you know the user ID this access token belongs to, you can validate it here
//$tokenMetadata->validateUserId('123');
$tokenMetadata->validateExpiration();

if (! $accessToken->isLongLived()) {
    // Exchanges a short-lived access token for a long-lived one
    try {
        $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
    } catch (Facebook\Exceptions\FacebookSDKException $e) {
        echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n";
        exit;
    }

    echo '<h3>Long-lived</h3>';
    var_dump($accessToken->getValue());
}

$_SESSION['fb_access_token'] = (string) $accessToken;

try {
    // Returns a `Facebook\FacebookResponse` object
    // EXAMPLE: /me?fields=id,name
    $response = $fb->get('/me?fields=id,name,email', (string) $accessToken);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
}

$user = $response->getGraphUser();

echo 'Name: ' . $user['name'];
echo 'email: ' .$user['email'];

Fluid Iterator + Modulo

<f:for each="{example.collection}" as="item"  iteration="iterator"  >
   <f:if condition="{iterator.index} % 2">
     <f:then>Rest</f:then>
      <f:else>
          <f:if condition="{iterator.index}==0">
              <f:then>First</f:then>
              <f:else>kein Rest</f:else>
          </f:if>
      </f:else>
   </f:if>
</f:for>

Widget->PaginateViewHelper

plugin.tx_infochy_example{
    view {
        widget {
            TYPO3\CMS\Fluid\ViewHelpers\Widget\PaginateViewHelper {
                templateRootPath = {$plugin.tx_infochy_example.view.templateRootPath}
            }
        }
    }
}

RealURL Autoconf

https://docs.typo3.org/typo3cms/extensions/realurl/Realurl/AutomaticConfiguration/AutomaticConfigurationOfExtensions/Index.html

ext_localconf.php

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/realurl/class.tx_realurl_autoconfgen.php']['extensionConfiguration'][$_EXTKEY] = 
'EXT:' . $_EXTKEY . '/Classes/Hooks/RealurlAutoconf.php:Infochy\\InfochyExample\\Hooks\\RealurlAutoconf->pluginConfiguration';

HOOK

class RealurlAutoconf {

    /**
     * @param array $params
     * @param \DmitryDulepov\Realurl\Configuration\AutomaticConfigurator $pObj
     * @return array
     */
    public function pluginConfiguration($params, &$pObj) {
        return array_merge_recursive($params['config'], array(
                'postVarSets' => array(
                    '_DEFAULT' => array(
                        'plugin' => array(
                            array(
                                'GETvar' => 'tx_infochy_example[action]',
                                'valueMap' => array(
                                    'show' => 'show',
                                    'list' => 'list',
                                ),
                                'noMatch' => 'bypass',
                            ),
                            array(
                                'GETvar' => 'tx_infochy_example[controller]',
                                'valueMap' => array(
                                    'Example' => 'controller',
                                ),
                                'noMatch' => 'bypass',
                            ),
                            array(
                                'GETvar' => 'tx_infochy_example[item]',
                                'lookUpTable' => array(
                                    'table' => 'tx_infochy_domain_model_example',
                                    'id_field' => 'uid',
                                    'alias_field' => 'title',
                                    'useUniqueCache' => 1,
                                    'useUniqueCache_conf' => array(
                                        'strtolower' => 1,
                                        'spaceCharacter' => '-',
                                    ),
                                ),
                            ),
                        ),
                        'paginate' => array(
                            array(
                                'GETvar' => 'tx_infochy_example[@widget_0][currentPage]',
                                //'noMatch' => 'bypass',
                            ),
                            array(
                                'GETvar' => 'tx_infochy_example[action]',
                                'valueMap' => array(
                                    'show' => 'show',
                                    'list' => 'list',
                                ),
                                'noMatch' => 'bypass',
                            ),
                            array(
                                'GETvar' => 'tx_infochy_example[controller]',
                                'valueMap' => array(
                                    'Example' => 'controller',
                                ),
                                'noMatch' => 'bypass',
                            ),
                        ),

                    ),
                ),
            )
        );
    }


}