Joomla! Template Override:

Profil Darstellung in Tabs


Gerade wenn man mehrere Felder, wie Benutzerprofil, 2-Faktor Authentifizierung und weitere Custom Fields aktiv hat, dann kann die Liste schon sehr lang werden und man muss zum Speichern weit nach unten scrollen. Für eine bessere Übersicht lasse ich hierbei die jeweiligen „Fieldsets“ in Tabs anordnen, wie man es vom Backend her kennt. Die Buttons sind dabei immer sichtbar, egal in welchem Tab ich mich befinde.

Hierzu muss nur die edit.php des Frontend um ein paar Zeilen zur Darstellung der Tabs ergänzt werden. Die 2 Fieldsets für die 2-Faktor Authentifizierung lasse ich jedoch in einem Tab anzeigen, da diese zusammen gehören.

Ergänzung zu "Benutzer mit Vorname + Nachname"

Eine Version dieses Overrides für Joomla 4 kann hier heruntergeladen werden.

Benötigte Override-Dateien


  • <?php
    /**
     * @package     Joomla.Site
     * @subpackage  com_users
     *
     * @copyright   Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    defined('_JEXEC') or die;
    
    JHtml::_('behavior.keepalive');
    JHtml::_('behavior.formvalidator');
    JHtml::_('formbehavior.chosen', 'select');
    JHtml::_('bootstrap.tooltip');
    
    
    // Load user_profile plugin language
    $lang = JFactory::getLanguage();
    $lang->load('plg_user_profile', JPATH_ADMINISTRATOR);
    
    ?>
    <div class="profile-edit<?php echo $this->pageclass_sfx; ?>">
    	<?php if ($this->params->get('show_page_heading')) : ?>
    		<div class="page-header">
    			<h1>
    				<?php echo $this->escape($this->params->get('page_heading')); ?>
    			</h1>
    		</div>
    	<?php endif; ?>
    	<script type="text/javascript">
    		Joomla.twoFactorMethodChange = function(e)
    		{
    			var selectedPane = 'com_users_twofactor_' + jQuery('#jform_twofactor_method').val();
    
    			jQuery.each(jQuery('#com_users_twofactor_forms_container>div'), function(i, el)
    			{
    				if (el.id != selectedPane)
    				{
    					jQuery('#' + el.id).hide(0);
    				}
    				else
    				{
    					jQuery('#' + el.id).show(0);
    				}
    			});
    		}
    	</script>
    	<script type="text/javascript">
    	(function ($) {
    		$(document).ready(function() {
    			$('input#jform_name').parent().parent().hide();
    			
    			function new_name(){
    				var usr_name = $('input#jform_com_fields_nachname').val() + ', ' + $('input#jform_com_fields_vorname').val();			
    				$('input#jform_name').val(usr_name);
    			}
    			
    			$('#jform_com_fields_nachname').on('input', function() {
    				new_name();
    			});
    			$('#jform_com_fields_vorname').on('input', function() {
    				new_name();
    			});
    	});
    	
    	})(jQuery);
    	</script>      
    	<form id="member-profile" action="<?php echo JRoute::_('index.php?option=com_users&task=profile.save'); ?>" method="post" class="form-validate form-horizontal well" enctype="multipart/form-data">
    		<?php // Iterate through the form fieldsets and display each one. ?>
    		<?php echo JHtml::_('bootstrap.startTabSet', 'usersprofile', array('active' => 'core')); ?>		
    		<?php foreach ($this->form->getFieldsets() as $group => $fieldset) : ?>
    			<?php $fields = $this->form->getFieldset($group); ?>
    			<?php if (count($fields)) : ?>
    				<?php echo JHtml::_('bootstrap.addTab', 'usersprofile', $group, JText::_($fieldset->label)); ?>
    				<fieldset>
    					<?php // If the fieldset has a label set, display it as the legend. ?>
    					<?php if (isset($fieldset->label)) : ?>
    						<legend>
    							<?php echo JText::_($fieldset->label); ?>
    						</legend>
    					<?php endif; ?>
    					<?php if (isset($fieldset->description) && trim($fieldset->description)) : ?>
    						<p>
    							<?php echo $this->escape(JText::_($fieldset->description)); ?>
    						</p>
    					<?php endif; ?>
    					<?php // Iterate through the fields in the set and display them. ?>
    					<?php foreach ($fields as $field) : ?>
    						<?php // If the field is hidden, just display the input. ?>
    						<?php if ($field->hidden) : ?>
    							<?php echo $field->input; ?>
    						<?php else : ?>
    							<div class="control-group">
    								<div class="control-label">
    									<?php echo $field->label; ?>
    									<?php if (!$field->required && $field->type !== 'Spacer') : ?>
    										<span class="optional">
    											<?php echo JText::_('COM_USERS_OPTIONAL'); ?>
    										</span>
    									<?php endif; ?>
    								</div>
    								<div class="controls">
    									<?php if ($field->fieldname === 'password1') : ?>
    										<?php // Disables autocomplete ?>
    										<input type="password" style="display:none">
    									<?php endif; ?>
    									<?php echo $field->input; ?>
    								</div>
    							</div>
    						<?php endif; ?>
    					<?php endforeach; ?>
    				</fieldset>
    				<?php echo JHtml::_('bootstrap.endTab'); ?>
    			<?php endif; ?>
    		<?php endforeach; ?>
    		<?php if (count($this->twofactormethods) > 1) : ?>
    		<?php echo JHtml::_('bootstrap.addTab', 'usersprofile', 'twofactor', JText::_('COM_USERS_PROFILE_TWO_FACTOR_AUTH')); ?>
    			<fieldset>
    				<legend><?php echo JText::_('COM_USERS_PROFILE_TWO_FACTOR_AUTH'); ?></legend>
    				<div class="control-group">
    					<div class="control-label">
    						<label id="jform_twofactor_method-lbl" for="jform_twofactor_method" class="hasTooltip"
    							title="<?php echo '<strong>' . JText::_('COM_USERS_PROFILE_TWOFACTOR_LABEL') . '</strong><br />' . JText::_('COM_USERS_PROFILE_TWOFACTOR_DESC'); ?>">
    							<?php echo JText::_('COM_USERS_PROFILE_TWOFACTOR_LABEL'); ?>
    						</label>
    					</div>
    					<div class="controls">
    						<?php echo JHtml::_('select.genericlist', $this->twofactormethods, 'jform[twofactor][method]', array('onchange' => 'Joomla.twoFactorMethodChange()'), 'value', 'text', $this->otpConfig->method, 'jform_twofactor_method', false); ?>
    					</div>
    				</div>
    				<div id="com_users_twofactor_forms_container">
    					<?php foreach ($this->twofactorform as $form) : ?>
    						<?php $style = $form['method'] == $this->otpConfig->method ? 'display: block' : 'display: none'; ?>
    						<div id="com_users_twofactor_<?php echo $form['method']; ?>" style="<?php echo $style; ?>">
    							<?php echo $form['form']; ?>
    						</div>
    					<?php endforeach; ?>
    				</div>
    			</fieldset>
    			<fieldset>
    				<legend>
    					<?php echo JText::_('COM_USERS_PROFILE_OTEPS'); ?>
    				</legend>
    				<div class="alert alert-info">
    					<?php echo JText::_('COM_USERS_PROFILE_OTEPS_DESC'); ?>
    				</div>
    				<?php if (empty($this->otpConfig->otep)) : ?>
    					<div class="alert alert-warning">
    						<?php echo JText::_('COM_USERS_PROFILE_OTEPS_WAIT_DESC'); ?>
    					</div>
    				<?php else : ?>
    					<?php foreach ($this->otpConfig->otep as $otep) : ?>
    						<span class="span3">
    							<?php echo substr($otep, 0, 4); ?>-<?php echo substr($otep, 4, 4); ?>-<?php echo substr($otep, 8, 4); ?>-<?php echo substr($otep, 12, 4); ?>
    						</span>
    					<?php endforeach; ?>
    					<div class="clearfix"></div>
    				<?php endif; ?>
    			</fieldset>
    			<?php echo JHtml::_('bootstrap.endTab'); ?>
    		<?php endif; ?>
    		<?php echo JHtml::_('bootstrap.endTabSet'); ?>
    		<div class="control-group">
    			<div class="controls">
    				<button type="submit" class="btn btn-primary validate">
    					<?php echo JText::_('JSUBMIT'); ?>
    				</button>
    				<a class="btn" href="<?php echo JRoute::_('index.php?option=com_users&view=profile'); ?>" title="<?php echo JText::_('JCANCEL'); ?>">
    					<?php echo JText::_('JCANCEL'); ?>
    				</a>
    				<input type="hidden" name="option" value="com_users" />
    				<input type="hidden" name="task" value="profile.save" />
    			</div>
    		</div>
    		<?php echo JHtml::_('form.token'); ?>
    	</form>
    </div>
    


Peer Luks




Fehler melden

Bitte beachte unsere Datenschutzerklärung

Alle mit (*) markierten Felder werden benötigt um eine E-Mail zu senden.

E-Mail für Kontakt
Nachricht hier eingeben.
Dieses Feld wird benötigt.