Diesmal eine eher allgemeine Frage zur Modulentwicklung von mir. Ich muss ein Alias für ein neues Event erzeugen. Dieses muss eindeutig sein (klar), und muss vollständig automatisch generiert werden, der Anwender hat keinen Einfluss darauf.
Im Backend läuft das so, dass der Alias aus dem Titel generiert wird, und ggf. die ID drangehängt wird. Aber es ist ja nicht sicher, dass der Alias "Titel-ID" nicht auch schon existiert, oder?
Aktuell mache ich das so:
PHP-Code:
public function AliasExists($suggestedAlias) {
$objAlias = $this->Database->prepare("SELECT id FROM tl_calendar_events WHERE alias=?")
->execute($suggestedAlias);
if ($objAlias->numRows) {
return true;
} else {
return false;
}
}
public function generateAlias($varValue) {
// Generate new alias from varValue (here: the title)
$varValue = standardize($varValue);
if ($this->AliasExists($varValue)) {
// alias already exists, we have to modify it.
// 1st try: Add the ID of the event (which is currently not in the DB, therefore +1 at the end)
$maxI = $this->Database->prepare("SELECT MAX(id) as id FROM tl_calendar_events")
->limit(1)
->execute();
$newID = $maxI->id + 1;
$varValue .= '-'.$newID;
// if even this modified alias exists: use random alias, with ID as prefix
while ($this->AliasExists($varValue)) {
$randID = mt_rand();
$varValue = $newID.'-'.$randID;
}
}
return $varValue;
}
Prinzip: zuerst "standardisierten Titel" probieren, dann mit ID dran, und wenn auch das nicht klappt, dann die ID als Alias, gefolgt von einem zufälligen Wert. Theoretisch kann die letzte Schleife in eine Endllosschleife laufen, aber dieses "Risiko" gehe ich ein.
Frage aber: Wie sieht das aus, wenn der Titel zu lang wird, also über die 128 Zeichen, die ein Alias haben kann, hinaus geht? Wird das durch standardize bzw. die Datenbankabfrage abgefangen, oder muss ich da noch ein Substr() für den ersten Alias-Versuch drumbauen, um das sauber zu machen? Oder ist das eh alles überflüssig, oder gibt es da schon eine Core-Funktion für?