Aenderungen in REDAXO 5

mortan66 edited this page Oct 2, 2016 · 22 revisions

Hinweis: Die Liste ist noch nicht vollständig!

$REX

Die globale Variable $REX wurde entfernt. Im Allgemeinen wurde sie ersetzt durch die statische Klasse “rex”, viele Dinge aus $REX werden nun aber an anderen Stellen gelagert. AddOn-spezifische Dinge sollten zum Beispiel direkt in den neuen AddOn-Objekten gelagert werden (siehe unten). Möchte man aber mal etwas modulübergreifend zwischenlagern o. ä., dann kann man dafür durchaus die Methoden rex::setProperty() und rex::getProperty() verwenden.

REDAXO 4 REDAXO 5
$REX[‘KEY’] etc. rex::getProperty(‘key’)
rex::setProperty(‘key’, $value)
$REX[‘SERVER’] rex::getServer()
$REX[‘SERVERNAME’] rex::getServerName()
$REX[‘REDAXO’] rex::isBackend()
$REX[‘CUR_CLANG’] rex_clang::getCurrentId()
$REX[‘ARTICLE_ID’] rex_article::getCurrentId()
$REX[‘START_ARTICLE_ID’] rex_article::getSiteStartArticleId()
$REX[‘NOTFOUND_ARTICLE_ID’] rex_article::getNotfoundArticleId()
$REX[‘CLANG’] rex_clang::getAll()
$REX[‘MOD_REWRITE’] existiert nicht mehr
$REX[‘TABLE_PREFIX’] rex::getTablePrefix()
rex::getTable($table) (ergibt: ‘rex_’.$table)
$REX[‘USER’]
$REX[‘USER’]→hasPerm(‘myperm[]’)
rex::getUser()
rex::getUser()→hasPerm(‘myperm[]’)
$REX[‘PERM’][] = ‘myperm[]’ rex_perm::register(‘myperm[]’, $name = null)
zweiter (optionaler) Parameter ist ein Bezeichner, der in der Rechteverwaltung erscheint
$REX[‘EXTPERM’][] = ‘myperm[]’ rex_perm::register(‘myperm[]’, $name = null, rex_perm::OPTIONS)
$REX[‘EXTRAPERM’][] = ‘myperm[]’ rex_perm::register(‘myperm[]’, $name = null, rex_perm::EXTRAS)
$REX[‘HTDOCS_PATH’]
$REX[‘INCLUDE_PATH’]
$REX[‘FRONTEND_PATH’]
$REX[‘MEDIAFOLDER’]
$REX[‘FRONTEND_FILE’]
rex_path (siehe hier)
$REX[‘ADDON’] rex_addon bzw. rex_plugin (siehe unten)

REX_VAR

REDAXO 4 REDAXO 5
VALUE[] REX_INPUT_VALUE[]
REX_HTML_VALUE[id=1] REX_VALUE[id=1 output=html]
INPUT_PHP REX_INPUT_VALUE[]
REX_PHP REX_VALUE[id=1 output=php]
REX_LINK_BUTTON[id=1] REX_LINK[id=1 widget=1]
REX_LINKLIST_BUTTON[id=1] REX_LINKLIST[id=1 widget=1]
REX_MEDIA_BUTTON[id=1] REX_MEDIA[id=1 widget=1]
REX_MEDIALIST_BUTTON[id=1] REX_MEDIALIST[id=1 widget=1]

Funktionen und Klassen

REDAXO 4 REDAXO 5
OOArticle
OOCategory
OOMedia
OOMediaCategory
OOArticleSlice
rex_article
rex_category
rex_media
rex_media_category
rex_article_slice
rex_article rex_article_content
OOArticle::getArticleById()
OOCategory::getCategoryById()
OOMedia::getMediaByFilename()
OOMediaCategory::getCategoryById()
rex_article::get()
rex_category::get()
rex_media::get()
rex_media_category::get()
OOArticle::isValid()
OOCategory::isValid()
OOMedia::isValid()
OOMediaCategory::isValid()
Entfernt, stattdessen: “$art instanceof rex_article” etc.
$article→getDescription()
$article→isStartPage()
$article→getValue(‘art_description’)
$article→isStartArticle()
rex_register_extension()
rex_register_extension_point()
REX_EXTENSION_EARLY
REX_EXTENSION_LATE
rex_extension::register()
rex_extension::registerPoint()
rex_extension::EARLY
rex_extension::LATE
rex_title()
rex_info()
rex_warning()
etc.
rex_view::title()
rex_view::info()
rex_view::warning()
etc.
rex_put_file_contents() rex_file::put()
rex_file::putCache() (JSON-formatiert)
rex_file::putConfig() (YAML-formatiert)
rex_get_file_contents() rex_file::get()
rex_file::getCache()
rex_file::getConfig()
rex_replace_dynamic_contents() Entfernt, da dynamische Inhalte in eigenen Dateien gespeichert werden sollen
rex_deleteDir()
rex_deleteFiles()
rex_createDir()
rex_copyDir()
rex_dir::delete()
rex_dir::deleteFiles()
rex_dir::create()
rex_dir::copy()
rex_absPath() rex_path::absolute()
rex_send_file()
rex_send_resource()
rex_send_article()
rex_send_content()
rex_response::sendFile()
rex_response::sendResource()
rex_response::sendArticle()
rex_response::sendContent()
rex_generateAll()
rex_deleteAll()
rex_delete_cache()
rex_call_func()
rex_check_callable()
Entfernt, stattdessen: call_user_func() / call_user_func_array()
Entfernt, stattdessen: is_callable()
rex_split_string() rex_string::split()
rex_addslashes() Entfernt, stattdessen: addslashes() / addcslashes()
rex_highlight_string()
rex_highlight_file()
rex_string::highlight()
rex_tabindex() Entfernt
rex_hasBackendSession() rex_backend_login::hasSession()
$I18N→msg()
rex_translate()
rex_i18n::msg()
rex_i18n::translate()
rex_lang_is_utf8() Entfernt, da REDAXO 5 immer UTF8 verwendet
rex_create_lang() Entfernt, da rex_i18n nun statisch ist
OOAddon::getProperty($addon, $property)
OOAddon::isAvailable($addon)
OOPlugin::isInstalled($addon, $plugin)
etc.
rex_addon::get($addon)→getProperty($property)
rex_addon::get($addon)→isAvailable()
rex_plugin::get($addon, $plugin)→isInstalled()
etc.
rex_install_dump()
rex_organize_priorities()
rex_sql_util::importDump()
rex_sql_util::organizePriorities()
rex_getAttributes()
rex_setAttributes()
In der Form entfernt, stattdessen rex_sql::getArrayValue() und rex_sql::setArrayValue()
rex_a79_textile() rex_textile::parse()

Extension Points

REDAXO 4 REDAXO 5
ALL_GENERATED CACHE_DELETED
ADDONS_INCLUDED PACKAGES_INCLUDED
OUTPUT_FILTER_CACHE RESPONSE_SHUTDOWN
OOMEDIA_IS_IN_USE MEDIA_IS_IN_USE

rex_sql

Die Methoden setQuery(), insert(), update() etc. liefern keine boolschen Werte mehr zurück, sondern das aktuelle rex_sql-Objekt. Bei Fehlern wird eine rex_sql_exception geworfen.

REDAXO 4:

<?php
if ($sql->update()) {
    $info = 'Success';
} else {
    $error = $sql->getError();
}

REDAXO 5:

<?php
try {
    $sql->update();
    $info = 'Success';
} catch (rex_sql_exception $e) {
    $error = $e->getMessage();
}
REDAXO 4 REDAXO 5
$sql→setWhere(‘myid=“35” OR abc=“zdf”’) $sql→setWhere(‘myid = :id OR abc = :abc’, array(‘:id’ => 3, ‘:abc’ => ‘zdf’)) oder $sql→setWhere(array(‘id’ => 3, ‘abc’ => ‘zdf’))
$sql→setQuery(’UPDATE rex_table SET a=“$i” WHERE myid=“35” ’) $sql→setQuery(’UPDATE rex_table SET a=? WHERE myid=“35” ’, array($i))
$sql→setQuery(‘SELECT * FROM rex_table WHERE col_str = “$adf” and col_int = “4”’) $sql→setQuery(‘SELECT * FROM rex_table WHERE col_str = :mystr and col_int = :myint’, array(‘:mystr’ => $adf, ‘:myint’ => 4))

rex_form

REDAXO 4 REDAXO 5
$form = rex_form::factory(‘table’, ‘legend’, ‘id="’.$id.‘"’, ‘post’, false, ‘my_form_class’); $form = new my_form_class(‘table’, ‘legend’, ‘id="’.$id.‘"’, ‘post’, false);
oder_
$form = my_form
class::factory(‘table’, ‘legend’, ‘id="’.$id.‘"’, ‘post’, false);

Packages (AddOns/PlugIns)

Package ist der neue gemeinsame Oberbegriff für AddOns und PlugIns.

REDAXO 4 REDAXO 5
(un)install.inc.php (un)install.php
config.inc.php package.yml
boot.php
classes/ lib/
vendor/ (für externe Klassen)
files/ assets/
pages/index.inc.php pages/index.php

Die statischen Package-Informationen, wie Version, Autor etc. sollten statt in der boot.php (ehemals config.inc.php), in der neuen package.yml stehen. In dieser Datei kann auch angegeben werden, welche REDAXO-Version, welche PHP-Extensions oder welche AddOns und PlugIns benötigt werden (wird automatisch überprüft). Beispiel:

package: be_dashboard
version: '1.3'
author: Markus Staab
supportpage: forum.redaxo.de

page:
  title: Dashboard
  perm: be_dashboard[]
  block: system

requires:
  redaxo: '~5.1'
  php
    version: '>=5.3.4'
    extensions: [gd, xml]
  packages:
    structure: '5.0.1'
    structure/content: '>5.0, <5.2'

Es können aber auch weiterhin Package-Informationen in der boot.php gesetzt werden, aber nicht mehr über $REX[‘ADDON’], sondern über die neue package api. Das aktuelle Objekt (rex_addon oder rex_plugin) ist in den Dateien (boot.php, install.php, pages/index.php etc.) über $this erreichbar.

Beispiel boot.php:

$this->setProperty('author', 'Markus Staab');

Beispiel install.php:

$error = '';

// Überprüfungen

if($error)
  $this->setProperty('installmsg', $error);
else
  $this->setProperty('install', true);

Innerhalb von Klassen und Funktionen, wo das Package nicht über $this zur Verfügung steht, kann so auf die Daten zugegriffen werden:

$author = rex_addon::get('myaddon')->getProperty('author');

Außer der package.yml sind alle Dateien (boot.php, install.php, uninstall.php etc.) optional. Die package.yml benötigt auf jeden Fall die “package”- und “version”-Angabe.

Dadurch, dass die Dateien aus den Objekten heraus eingebunden werden (damit $this zur Verfügung steht), sind globale Variablen nicht mehr automatisch verfügbar.

Der Klassenordner (“classes”) heißt jetzt “lib”. Die Klassen in diesem Ordner (und Unterordnern) müssen nicht mehr manuell über include/require eingebunden werden, dies übernimmt das autoloading bei Bedarf automatisch.

Die Sprachdateien im “lang”-Ordner werden automatisch dem Sprachkatalog hinzugefügt.

Der “files”-Ordner in der REDAXO-Root-Ebene wurde aufgeteilt, die Dateien des Medienpools liegen nun im “media”-Ordner, für die Dateien der AddOns/PlugIns gibt es den “assets”-Ordner. Dementsprechend muss der ehemalige “files”-Ordner innerhalb der Packages nun “assets” heißen.

Die layout/top.php und layout/bottom.php werden automatisch eingebunden.

Die Dateien im AddOn-, bzw. PlugIn-Ordner sollten nicht mehr verändert werden, um automatische Updates zu ermöglichen. Konfigurationswerte können über die neue rex_config in der Datenbank gespeichert werden (werden gecacht):

rex_config::set($addon, $key, $value);
$value = rex_config::get($addon, $key);

// alternativ über das Package-Objekt:
rex_addon::get($addon)->setConfig($key, $value);
$value = rex_addon::get($addon)->getConfig($key);

// oder falls das Package-Objekt über $this erreichbar ist (config.inc.php etc.):
$this->setConfig($key, $value);
$value = $this->getConfig($key);

Des Weiteren können Daten im Ordner “redaxo/data/addons/$addonName” abgelegt werden, der Pfad ist über rex_path::addonData($addon) und rex_addon::get($addon)->getDataPath(), bzw. $this->getDataPath() erreichbar.