Baustelle Diskussion:Intranet mit Windows Benutzernamen
Hallo und willkommen im Wiki :) Erst einmal vielen Dank, dass Du das Tutorial hier zur Verfügung stellst. Auch mit der Wikisyntax scheinst Du Dich schon gut auszukennen - welcome.
So, nun aber auch gleich die erste Rüge: Du solltest Core häcks wirklich nur in extremsten Ausnahmesituationen verwenden und wenn sie denn wirklich nicht zu vermeiden sind (Beispiel fällt mir im Moment zum Glück keins ein ;) )
Ich glaube, die ganze Geschichte lässt sich im Template regeln - das spart viel Kopfschmerzen, grade bei der 1.6 die nur eine sehr kurze Lebenserwartung hat ;)
Vorschlag: Mir fällt kein Grund ein, warum Du die Funktion in die behavior.php der libraries schreibst ? Gibt es einen ??
Vielleicht am besten gleich in die index.php des Templates:
<head> ... <?php if('msie' == JBrowser::getInstance()->getBrowser() && JFactory::getUser()->guest) : ?> <!-- Diesen Code nur im MS IE (R) bei einem nicht eigeloggten Benutzer ausführen --> <script type="text/javascript">window.addEvent('domready', function(){ var WshNetwork = new ActiveXObject('WScript.Network'); document.id('modlgn-username').value = WshNetwork.UserName; document.id('modlgn-username-show').value = WshNetwork.UserName; }); </script> <?php endif; ?> ... </head>
Als nächstes kommen dann die sog. Template Overrides
Die Datei
modules\mod_login\tmpl\
default.php
wird kopiert nach:
templates\TEMPLATE\html\mod_login\
default.php
und folgendermassen geändert:
<p id="form-login-username"> <label for="modlgn-username"><?php echo JText::_('MOD_LOGIN_VALUE_USERNAME') ?></label> <?php if('msie' == JBrowser::getInstance()->getBrowser()) :?> <input id="modlgn-username-show" type="text" class="inputbox" size="18" disabled="disabled" /> <input id="modlgn-username" type="hidden" name="username" /> <?php else : ?> <input id="modlgn-username" type="text" name="username" class="inputbox" size="18" /> <?php endif; ?> </p>
Und anstelle den Controller von com_users zu häcken kann man auch hier ein Override einsetzen.
Die Datei
components\com_users\views\login\tmpl\
default_login.php
wird kopiert nach:
templates\TEMPLATE\html\com_users\login\
default_login.php
und folgendermassen geändert:
<?php foreach ($this->form->getFieldset('credentials') as $field): ?> <?php if('username' == $field->name && 'msie' == JBrowser::getInstance()->getBrowser()) : ?> <div class="login-fields"><?php echo $field->label; ?> <input id="modlgn-username-show" type="text" name="usershow" class="inputbox" size="18" disabled="disabled" /> <input id="modlgn-username" type="hidden" name="username" class="inputbox" size="18" /> </div> <?php continue; ?> <?php endif; ?>
Ich hab also mal eine Windows 7 VM angeschmissen und ein wenig damit rumgespielt.. Vielleicht solltest Du auch noch dazuschreiben wie und wo man denn die erforderlichen Einstellungen / Freigaben im IE findet - das war ganz schön schwierig ;)
So ich habe mal die EInstellung im IE beschrieben, ein Problem habe ich aber noch mit deinem neuen Code
templates\TEMPLATE\html\com_users\login\
default_login.php
<?php foreach ($this->form->getFieldset('credentials') as $field): ?> <?php if('username' == $field->name && 'msie' == JBrowser::getInstance()->getBrowser()) : ?> <div class="login-fields"><?php echo $field->label; ?> <input id="modlgn-username-show" type="text" name="usershow" class="inputbox" size="18" disabled="disabled" /> <input id="modlgn-username" type="hidden" name="username" class="inputbox" size="18" /> </div> <?php continue; ?> <?php endif; ?>
Ich habe dabei das Problem, das bei einem falschen Login ein Fehler entsteht: unexpected $end
Weiterhin habe ich jetzt beim IE ein gelbes Warndreieck mit einem Fehler auf der Seite, das
Meldung: Das Objekt unterstützt diese Eigenschaft oder Methode nicht. Zeile: 4 Zeichen: 1
Zu den Overrides bzw. CoreHacks.
Ich war erstmal froh, das ich es überhaupt geschafft hatte ^^ Weiterhin bin ich von den Overrides nicht wirklich überzeugt, beim einbau von etwas neuem sind sie quasi als Sicherheitskopie zu verstehen. Korrigier mich bitte, wenn ich da falsch liege, aber die Overrides bleiben bestehen, wenn die Corefiles geupdatet werden. Das heißt, es kommt ein Update für Joomla raus, die Coredatei wird überschrieben aber ich hab ja noch meinen Override. Das heißt ja, das ich durch den Override noch die alte Version des Cores benutze und nicht den neuen "verbesserten" Code. Also muss ich den Override an den neuen Code anpassen. also ändere ich entweder die Corefiles oder die Overrides, die arbeit ist aber die selbe :)