rex_url

Keywords: URL-Generierung, Backend-Links, Frontend-Links, Assets, Media, Backendcontroller, Frontendcontroller

Übersicht

rex_url generiert relative URLs für Frontend, Backend, Controller, Media, Assets. Nutzt rex_path_default_provider für flexible Pfade. Unterstützt Query-Parameter mit Escaping für HTML-Kontext (&).

Methoden

Methode Parameter Rückgabe Beschreibung
base($file) string string Basis-URL (Root) + optionale Datei
frontend($file) string string URL zum Frontend-Ordner
frontendController($params, $escape) array, bool string URL zu index.php (Frontend) mit Parametern
backend($file) string string URL zum Backend-Ordner (redaxo/)
backendController($params, $escape) array, bool string URL zu redaxo/index.php mit Parametern
backendPage($page, $params, $escape) string, array, bool string URL zu Backend-Page mit ?page=...
currentBackendPage($params, $escape) array, bool string URL zur aktuellen Backend-Page
media($file) string string URL zu media/ + Dateiname
assets($file) string string URL zu assets/ + Datei
coreAssets($file) string string URL zu Core-Assets (assets/core/)
addonAssets($addon, $file) string, string string URL zu Addon-Assets (assets/addons/{addon}/)
pluginAssets($addon, $plugin, $file) string, string, string string URL zu Plugin-Assets (assets/addons/{addon}/plugins/{plugin}/)

Praxisbeispiele

Backend-URLs generieren

// URL zu Backend-Startseite
$url = rex_url::backend(); // "/redaxo/"

// URL zu Backend-Controller
$url = rex_url::backendController(); // "/redaxo/index.php"

// Mit Parametern
$url = rex_url::backendController(['page' => 'system/settings'], false);
// "/redaxo/index.php?page=system/settings"

Backend-Pages verlinken

// URL zu spezifischer Backend-Page
$url = rex_url::backendPage('content/edit', ['article_id' => 1, 'clang' => 1]);
// "/redaxo/index.php?page=content/edit&article_id=1&clang=1"

// Escaped für HTML-Attribute (Standard)
$url = rex_url::backendPage('yform/manager/data_edit', ['table_name' => 'users'], true);
// "/redaxo/index.php?page=yform/manager/data_edit&table_name=users"

Aktuelle Backend-Page mit zusätzlichen Parametern

// URL zur aktuellen Seite + neue Parameter
$url = rex_url::currentBackendPage(['func' => 'edit', 'id' => 42]);
// Wenn auf "myaddon/main": "/redaxo/index.php?page=myaddon/main&func=edit&id=42"

// In rex_list für Edit-Links
$list = rex_list::factory('SELECT * FROM table');
$list->addColumn('edit', 'Edit', 0, [
    '<a href="' . rex_url::currentBackendPage(['func' => 'edit', 'id' => '###id###']) . '">Bearbeiten</a>'
]);

Frontend-URLs

// Frontend Root
$url = rex_url::frontend(); // "/"

// Frontend Controller
$url = rex_url::frontendController(['article_id' => 1, 'clang' => 1]);
// "/index.php?article_id=1&clang=1"

// Ohne Escaping für Redirects
$redirect = rex_url::frontendController(['article_id' => 5], false);
rex_response::sendRedirect($redirect);

Media-Dateien verlinken

// Bild aus media/
$imageUrl = rex_url::media('logo.png'); // "/media/logo.png"

// In Templates
echo '<img src="' . rex_url::media($filename) . '" alt="Image">';

// Dynamische Media-Ausgabe
if (rex_media::get($filename)) {
    echo '<a href="' . rex_url::media($filename) . '">Download</a>';
}

Assets verlinken

// Core-Assets (jQuery, Bootstrap etc.)
$jqueryUrl = rex_url::coreAssets('jquery.min.js');
// "/assets/core/jquery.min.js"

// Addon-Assets
$cssUrl = rex_url::addonAssets('myaddon', 'styles.css');
// "/assets/addons/myaddon/styles.css"

$jsUrl = rex_url::addonAssets('myaddon', 'script.js');
// "/assets/addons/myaddon/script.js"

Plugin-Assets

// Plugin von Addon
$pluginCss = rex_url::pluginAssets('yform', 'manager', 'styles.css');
// "/assets/addons/yform/plugins/manager/styles.css"

// In Backend-Pages
rex_view::addCssFile(rex_url::pluginAssets('myaddon', 'backend', 'backend.css'));
rex_view::addJsFile(rex_url::pluginAssets('myaddon', 'backend', 'backend.js'));

YForm Formular-Action

// YForm Custom-Form mit Backend-Action
$yform = new rex_yform();
$yform->setObjectparams('form_action', 
    rex_url::backendController([
        'page' => 'content/edit',
        'article_id' => $article_id,
        'clang' => $clang,
    ], false)
);
// Link zu Backend-Page mit Parametern
$params = ['domain_id' => $domainId, 'func' => 'edit'];
$editUrl = rex_url::backendPage('yrewrite/metainfo/domain', $params);

return '<a href="' . $editUrl . '">' . rex_i18n::msg('yrewrite_metainfo_edit') . '</a>';
// Backend-Link mit User-ID Parameter
$sessionUrl = rex_url::backendController([
    'page' => 'ycom/auth/sessions',
    'user_id' => $userId,
    'func' => 'create_session',
]);

Redirect nach Speichern

// In Backend-Page nach Form-Submit
if ($form->isSubmitted() && $form->validate()) {
    $form->save();
    
    $params = ['func' => '', 'msg' => 'saved'];
    rex_response::sendRedirect(rex_url::currentBackendPage($params, false));
}

Google Places Review Redirect

$params = ['func' => '', 'synced' => 1];
rex_response::sendRedirect(
    rex_url::backendPage('googleplaces/review', $params, false)
);

YForm Manager Table-Field Redirect

rex_response::sendRedirect(
    rex_url::backendController([
        'page' => 'yform/manager/table_field',
        'table_name' => 'rex_yrewrite_metainfo',
    ], false)
);

rex_list Pagination

$list = rex_list::factory('SELECT * FROM table');

// Interne Verwendung für Pagination
// rex_url::backendController() oder frontendController() je nach Kontext
$paginationUrl = rex::isBackend() 
    ? rex_url::backendController($params, $escape) 
    : rex_url::frontendController($params, $escape);
$helpUrl = rex_url::backendPage('packages', [
    'subpage' => 'help',
    'package' => 'yform_usability',
]);

echo '<a href="' . $helpUrl . '" title="' . rex_i18n::msg('help') . '">
    <i class="rex-icon rex-icon-help"></i>
</a>';

Assets in Backend-Views laden

// In Backend-Page (pages/main.php)
rex_view::addCssFile(rex_url::addonAssets('myaddon', 'backend.css'));
rex_view::addJsFile(rex_url::addonAssets('myaddon', 'backend.js'));

// Core-Assets
rex_view::addJsFile(rex_url::coreAssets('vendor/jquery/jquery.min.js'));

Basis-URL für absolute Pfade

// Root-URL
$baseUrl = rex_url::base(); // "https://example.com/"

// Datei im Root
$robotsUrl = rex_url::base('robots.txt'); // "/robots.txt"

// Für OpenGraph/Canonical in Templates
echo '<link rel="canonical" href="' . rex_url::base() . $article->getUrl() . '">';
// CSS-Dateien
echo '<link rel="stylesheet" href="' . rex_url::addonAssets('myaddon', 'frontend.css') . '">';

// JavaScript
echo '<script src="' . rex_url::addonAssets('myaddon', 'frontend.js').'"></script>';

// Bilder
echo '<img src="' . rex_url::addonAssets('myaddon', 'logo.svg') . '">';

Conditional Backend/Frontend URLs

// Je nach Kontext unterschiedliche URLs
if (rex::isBackend()) {
    $url = rex_url::backendController(['page' => 'myaddon/settings']);
} else {
    $url = rex_url::frontendController(['article_id' => 1]);
}
// Direkter Media-Download
$filename = 'document.pdf';
$downloadUrl = rex_url::media($filename);

echo '<a href="' . $downloadUrl . '" download>' . $filename . '</a>';

// Media Manager Resize
$resizedUrl = rex_url::media('mymedia.jpg') . '?rex_media_type=thumbnail';

Backend-Navigation mit URLs

$nav = rex_be_navigation::factory();

$page = new rex_be_page('myaddon/main', 'My Addon');
$page->setSubPath(rex_path::addon('myaddon', 'pages/main.php'));
$page->setHref(rex_url::backendPage('myaddon/main'));
$nav->addPage($page);

// Externe URL
$externalPage = new rex_be_page('external', 'Dokumentation');
$externalPage->setHref('https://example.com/docs');
$externalPage->setIsCorePage(false);
$nav->addPage($externalPage);

Ajax-Request URLs im Backend

// JavaScript: Ajax zu Backend-Controller
<script>
$.ajax({
    url: '<?= rex_url::backendController(['page' => 'myaddon/ajax', 'action' => 'getData'], false) ?>',
    success: function(data) {
        console.log(data);
    }
});
</script>

Escaping für verschiedene Kontexte

// HTML-Attribut (escaped mit &amp;)
$htmlUrl = rex_url::backendPage('page', ['id' => 1], true);
echo '<a href="' . $htmlUrl . '">Link</a>';

// Redirect/JavaScript (unescaped mit &)
$rawUrl = rex_url::backendPage('page', ['id' => 1], false);
rex_response::sendRedirect($rawUrl);

Favicon/Manifest URLs

// yrewrite_metainfo Icon-URLs
$faviconUrl = rex_url::media() . $icon->getValue('shortcut_icon');
$appleTouchUrl = rex_url::media() . $icon->getValue('apple_touch_icon');
$manifestUrl = rex_url::media() . $icon->getValue('manifest');

echo '<link rel="icon" href="' . $faviconUrl . '">';
echo '<link rel="apple-touch-icon" href="' . $appleTouchUrl . '">';