Problembeschreibung

Bei der Konstellation von Joomla 1.5.23 und der Komponente RokDownloads 1.0.2 trat bei meinen Projekten das Problem auf, dass wenn Benutzer nicht angemeldet waren und ein Dokument herunterladen wollen, welches nur für registrierte Nutzer downloadbar ist auf die Projekt-Startseite weitergleitet werden statt direkt zur Seite "Registrieren". Eine Möglichkeit, dass per Parameter einzustellen, konnte ich nicht finden und das, obwohl in den Scripten doch auf einen dafür vorhandenen Parameter files_download_redirect_for_no_access zugegriffen wird. Der Parameter ist schlicht leer.

Ob dieses Problem nur typische für meine Projekte ist, oder auch andere sich mit diesem wundersamen Verhalten herumschlagen, konnte ich nicht feststellen. In früheren Versionen von Joomla und RokDownloads ging es schon mal. Nun ja, ich musste das Problem beheben und will hier beschreiben wie ich vorgegangen bin.



Problemlösung

Verantwortlich für das Redirect zur Registrierungsseite, wenn die Rechte einen Download nicht zulassen, ist das Komponenten-Script components/com_rokdownloads/controllers/rokdownloads.php. Ca. in der Zeile 55 finden wir folgendes:

~/controllers/rokdownloads.php
55
$mainframe->redirect(JRoute::_($mparams->get('files_download_redirect_for_no_access')));

Hier sehen wir auch o.g. Parameter. Diese Zeile ersetzen wir durch folgende Variante, wobei auch nach Wunsch jede anderer URL eingetragen werden könnte.

~/rokdownloads.php
55
$mainframe->redirect(JRoute::_(JURI::base().'index.php?option=com_user&task=register#content'));

Nun kann es noch gewünscht sein, dass die sehr allgemein gehaltene Registrierungsseiten einen Hinweis enthalten soll, dass eine vorrige Anmeldung oder Neuregistrierung notwendig ist um geschützte Dokumente herunterladen zu können. Solche Änderungen sollten bevorzugt in den Template-Scripten vorgenommen werden. I.d.R. bieten Joomla-Templates in den Templateverzeichnissen eigene Scripte für J!-Erweiterungen an, die statt der J!-Haus-Scripte verwendet werden, wenn es diese gibt. Wir suchen uns also das Script für die User-Registrierung, z.B. beim JYAML-Template ist es dieses:templates/hm_yaml/html/com_user/register/default.php. Wer an dieser Stelle sauber die Mehrsprachigkeit von J! unterstützen will, sollte den Hinweistext nicht einfach ins Template schreiben, sondern statt dessen lieber über einen Sprachparameter, nennen wir ihn REGISTER_REQUIRED_FORDOWNLOADS, in das Template einbinden. Der Nachteil dieser Variante ist jedoch schlichtweg, dass dann weitere Core-Scripte, nämich die Sprachdateien modifiziert werden müssten, welche bei J!-Upgrades dann regelmäßig überschrieben werden und deshalb wieder nachgepflegt werden müssten. Das betreffenden Sprachscript z.B. in deutsch wäre dann language/de-DE/de-DE.com_user.ini. Hier müsste dann folgende Zeile eingefügt werden:

de_DE.com_user.ini
1
REGISTER_REQUIRED_FORDOWNLOADS=Wenn Sie von unserem Server geschützte Dokumente herunterladen möchten, müssen Sie sich zunächst registrieren.

Für diesen Fall muss dann in das o.g. Template-Script default.php noch folgende Zeile rein:

com_user/register/default.php
31
32
<p><?php echo JText::_('REGISTER_REQUIRED_FORDOWNOADS'); ?></p>
<p><?php echo JText::_('REGISTER_REQUIRED'); ?></p>

Wenn nicht zwei Core-Scripte gepflegt werden sollen, kann man diese Zeilen, wenn gewünscht auch mehrsprachig in das Template-Script schreiben.

default.php
31
32
33
34
35
36
37
38
39
<p><?php
 $lang =& JFactory::getLanguage();
 switch ($lang->getTag()) {
 case "de-DE" : ?>Wenn Sie von unserem Server geschützte Dokumente herunterladen möchten, müssen Sie sich zunächst registrieren.<?php break;
 case "ru-RU" : ?>Если вы хотите сохранить с нашего сервера защищенные документы, вы должны зарегистрироваться.<?php break;
 case "pl-PL" : ?>Jeśli chcesz załadować chronione dane z naszego serwera, musisz się najpierw zarejestrować.<?php break;
 default : ?>Please register at first, to enable the download of protected documents from our website. Thank you very much.<?php break;
 }
 ?></p>