J'ai créé un nouveau composant. Au niveau de l'administrateur, l'onglet actif revient au premier onglet (déclaré dans edit.php) lorsque je clique sur "Enregistrer" après avoir modifié un champ dans un autre onglet.
Je trace mes codes, et il en va de même pour le contenu (/article/views/tmpl/edit.php)
et liens web (/weblink/views/tmpl/edit.php)
, où l’onglet actif fonctionne; ce qui signifie qu'il reste sur le même onglet après "enregistrer". J'utilise Joomla 3.3.6
defined('_JEXEC') or die;
// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('behavior.formvalidation');
// JHtml::_('behavior.keepalive');
JHtml::_('formbehavior.chosen', 'select');
?>
<script type="text/javascript">
Joomla.submitbutton = function(task)
{
if (task == 'subscription.cancel' || document.formvalidator.isValid(document.id('item-form')))
{
<?php echo $this->form->getField('description')->save(); ?>
Joomla.submitform(task, document.getElementById('item-form'));
}
}
</script>
<form action="<?php echo JRoute::_('index.php? option=com_subscriptions&view=subscription&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" class="form-validate">
<?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?>
<div class="form-horizontal">
<?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'general')); ?>
<?php echo JHtml::_('bootstrap.addTab', 'myTab', 'general', empty($this->item->id) ? JText::_('COM_SUBSCRIPTIONS_NEW_SUBSCRIPTION', true) : JText::_('COM_SUBSCRIPTIONS_EDIT_SUBSCRIPTION', $this->item->id, true)); ?>
<div class="row-fluid">
<div class="span9">
......
<input type="hidden" name="task" value="" />
Sur la troisième dernière ligne ci-dessus
<?php echo JHtml::_('bootstrap.addTab', 'myTab', 'general', empty($this->item->id) ? JText::_('COM_SUBSCRIPTIONS_NEW_SUBSCRIPTION', true) : JText::_('COM_SUBSCRIPTIONS_EDIT_SUBSCRIPTION', $this->item->id, true)); ?>
Je pense que ça devrait être
JText::sprintf('COM_SUBSCRIPTIONS_EDIT_SUBSCRIPTION', $this->item->id, true)
au lieu de
JText::_('COM_SUBSCRIPTIONS_EDIT_SUBSCRIPTION', $this->item->id, true)
J'ai ajouté le code suivant à mon administrateur/composant/com_/view/file:
/* tab memory */
jQuery(function($) {
var json, tabsState;
$('a[data-toggle="pill"], a[data-toggle="tab"]').on('shown', function(e) {
var href, json, parentId, tabsState;
tabsState = localStorage.getItem("tabs-state");
json = JSON.parse(tabsState || "{}");
parentId = $(e.target).parents("ul.nav.nav-pills, ul.nav.nav-tabs").attr("id");
href = $(e.target).attr('href');
json[parentId] = href;
return localStorage.setItem("tabs-state", JSON.stringify(json));
});
tabsState = localStorage.getItem("tabs-state");
json = JSON.parse(tabsState || "{}");
$.each(json, function(containerId, href) {
return $("#" + containerId + " a[href=" + href + "]").tab('show');
});
$("ul.nav.nav-pills, ul.nav.nav-tabs").each(function() {
var $this = $(this);
if (!json[$this.attr("id")]) {
return $this.find("a[data-toggle=tab]:first, a[data-toggle=pill]:first").tab("show");
}
});
});
de cette discussion: https://stackoverflow.com/a/16984739/1729791 et ça marche pour moi