Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 40 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,44 @@ echo rex_getUrl('', '', ['news-id' => 42, 'page' => 2]); // weitere Parameter we

Bei mehreren Profilen mit gleichem Trigger (Multi-Domain, Mehrsprachigkeit) entscheiden aktuelle Domain und Sprache.

### Mehrere Profile pro Tabelle (Multi-Domain, Mehrsprachigkeit)

Eine Tabelle kann mehrere Profile haben, etwa je Domain oder je Sprache. `getUrl()` wählt automatisch das passende Profil: aktuelle Domain und Sprache zuerst, dann domainunabhängige Profile. Wer ein bestimmtes Profil braucht, etwa ein Link-Picker mit Auswahl, nutzt die Profil-API:

```php
use FriendsOfRedaxo\VirtualUrl\VirtualUrlsHelper;

// Alle aktiven Profile einer Tabelle (Zeilen aus rex_virtual_urls_profiles)
foreach (VirtualUrlsHelper::getProfilesByTable('rex_news') as $profile) {
echo $profile['id'] . ': /' . $profile['trigger_segment'] . '/ → Artikel ' . $profile['article_id']
. ' (' . ($profile['domain'] ?: 'alle Domains') . ', clang ' . $profile['clang_id'] . ')';
// -1 bei clang_id bzw. '' bei domain = gilt überall
}

// URL über genau dieses Profil, unabhängig von der aktuellen Domain
$profile = VirtualUrlsHelper::getProfileById(3);
$url = $profile ? VirtualUrlsHelper::getUrlByProfile($profile, 42) : null;
// → null, wenn der Datensatz fehlt, kein Slug hat oder das Profil eine andere Sprache hat

// Alle URLs eines Datensatzes, z. B. für hreflang oder eine Auswahl im Backend
foreach (VirtualUrlsHelper::getUrls('rex_news', 42) as $entry) {
echo $entry['profile']['domain'] . ': ' . $entry['url'];
// Profil ohne Domain-Bindung liefert die URL der aktuellen Domain
}

// Profil gezielt nach Domain wählen (Default: aktuelle yrewrite-Domain)
$profile = VirtualUrlsHelper::getProfileByTable('rex_news', 1, 'shop.example.org');
// Reihenfolge: Domain + Sprache, Domain + alle Sprachen, alle Domains + Sprache, alle Domains + alle Sprachen
```

Typischer Einsatz in einem Template mit zwei Domains, die dieselbe News-Tabelle anzeigen:

```php
// Kanonische URL auf der Hauptdomain, unabhängig davon, wo gerade gerendert wird
$main = VirtualUrlsHelper::getProfileByTable('rex_news', rex_clang::getCurrentId(), 'www.example.org');
$canonical = $main ? VirtualUrlsHelper::getUrlByProfile($main, $dataset->getId()) : null;
```

### URL programmatisch testen

```php
Expand Down Expand Up @@ -275,9 +313,9 @@ Bei Änderungen an konfigurierten Quell- oder Relationstabellen wird der YRewrit
| `getProfilesByTable(string $table): array` | Alle aktiven Profile einer Tabelle |
| `getProfileById(int $id): ?array` | Aktives Profil per ID |
| `getProfileByTable(string $table, int $clang = -1, ?string $domain = null): ?array` | Profil nach Tabelle, Sprache und Domain (Default: aktuelle yrewrite-Domain) |
| `handleUrlRewrite(rex_extension_point $ep): ?string` | `URL_REWRITE`-Hook für `rex_getUrl('', '', ['<trigger>-id' => $id])` (wird in boot.php registriert) |
| `testUrl(string $url, ?string $domain): array` | URL testen |
| `getProfileByTable(string $table, int $clang = -1): ?array` | Profil für Tabelle+Sprache |
| `getAllProfiles(): array` | Alle Profile |
| `getAllProfiles(): array` | Alle aktiven Profile (gecacht) |
| `clearCache(): void` | Profil-Cache leeren |

## Autor
Expand Down