記事を編集して保存するとします。 「記事が正常に保存されました」というメッセージがsystem-message-container div
に表示され、そこに貼り付けられます。たとえば、編集を行っている最中に他の作業に割り込まれ、しばらくして記事に戻ってきたとします。 「記事が正常に保存されました」というメッセージが表示されたら、[閉じる]をクリックします。その後、実際には最初の保存以降にメッセージが存在し、2番目の編集を保存していないことに気付きました。
(ちなみにウェブ編集だけでなく)もっと注意を払うことができることはわかっていますが、「記事が正常に保存されました」というメッセージを20秒後に消える方法があります。
PS:*よくわからない場合は[保存して閉じる]をクリックできると教えてくれますが、戻ってきたときに記事をめちゃくちゃにしていて、このメッセージを見たので自分に「わかりました問題ありません。記事を閉じて保存せずにもう一度開くと、戻ってきたときのバージョンに戻りますが...」.
編集:administrator\templates\isis\html\layouts\joomla\system\message.php
の内容:
<?php
/**
* @package Joomla.Administrator
* @subpackage Template.Isis
*
* @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
$msgList = $displayData['msgList'];
$alert = array('error' => 'alert-error', 'warning' => '', 'notice' => 'alert-info', 'message' => 'alert-success');
?>
<div id="system-message-container">
<?php if (is_array($msgList) && $msgList) : ?>
<button type="button" class="close" data-dismiss="alert">×</button>
<?php foreach ($msgList as $type => $msgs) : ?>
<div class="alert <?php echo $alert[$type]; ?>">
<h4 class="alert-heading"><?php echo JText::_($type); ?></h4>
<?php if ($msgs) : ?>
<?php foreach ($msgs as $msg) : ?>
<p><?php echo $msg; ?></p>
<?php endforeach; ?>
<?php endif; ?>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
administrator\templates\isis\js\template.js
の内容:
/**
* @package Joomla.Administrator
* @subpackage Templates.isis
* @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @since 3.0
*/
(function($)
{
$(document).ready(function()
{
$('*[rel=tooltip]').tooltip();
// Turn radios into btn-group
$('.radio.btn-group label').addClass('btn');
$('.btn-group label:not(.active)').click(function()
{
var label = $(this);
var input = $('#' + label.attr('for'));
if (!input.prop('checked')) {
label.closest('.btn-group').find('label').removeClass('active btn-success btn-danger btn-primary');
if (input.val() == '') {
label.addClass('active btn-primary');
} else if (input.val() == 0) {
label.addClass('active btn-danger');
} else {
label.addClass('active btn-success');
}
input.prop('checked', true);
}
});
$('.btn-group input[checked=checked]').each(function()
{
if ($(this).val() == '') {
$('label[for=' + $(this).attr('id') + ']').addClass('active btn-primary');
} else if ($(this).val() == 0) {
$('label[for=' + $(this).attr('id') + ']').addClass('active btn-danger');
} else {
$('label[for=' + $(this).attr('id') + ']').addClass('active btn-success');
}
});
// add color classes to chosen field based on value
$('select[class^="chzn-color"], select[class*=" chzn-color"]').on('liszt:ready', function(){
var select = $(this);
var cls = this.className.replace(/^.(chzn-color[a-z0-9-_]*)$.*/, '\1');
var container = select.next('.chzn-container').find('.chzn-single');
container.addClass(cls).attr('rel', 'value_' + select.val());
select.on('change click', function()
{
container.attr('rel', 'value_' + select.val());
});
});
});
})(jQuery);
これには次のjQueryを使用できます。
setTimeout(function() {
$('#system-message-container').fadeOut('fast');
}, 5000);
5000
は5秒なので、この値を好きなように変更できます
このコードはどこに追加しますか?
オプション1:これは長くて曲がった方法です。このjQueryコードを呼び出す小さなプラグインを作成できます。
オプション2:上記のコードを次のファイルに追加するだけです。
administrator/templates/isis/js/template.js
オプション2はコアハックと見なされるため、Joomlaの更新をインストールし、管理テンプレートにいくつかの変更があった場合、この変更は上書きされます。
これをシステムメッセージのテンプレートオーバーライドに追加することもできます。したがって、次のファイルをテキストエディタで開きます。
administrator/templates/isis/html/message.php
14行目で$buffer = null;
。このすぐ下に、以下を追加します。
$buffer .= "<script>
setTimeout(function() {
jQuery('#system-message-container').fadeOut('fast');
}, 5000);
</script>";
successメッセージの場合のみ、これを使用します。
$buffer .= "<script>
setTimeout(function() {
jQuery('.alert-success').parents('#system-message-container').fadeOut('fast');
}, 5000);
</script>";
お役に立てれば
これは正常に機能しますが、1回だけです。レンダリングされた2番目のメッセージがある場合、スクリプトはトリガーされません。
これを使用すると、正常に機能するeverytimeが成功します。
setInterval(function() {
jQuery('.alert-success').parents('#system-message-container').fadeOut('fast');
}, 5000);
これを追加して、フロントエンドで使用します。
$buffer .= "<script>
setInterval(function() {
jQuery('.alert-success').parents('#system-message-container').fadeOut('fast');
}, 5000);
console.log('timout triggered');
</script>";
messages.phpの14行目(元はtemplates/beez3/html/layouts/joomla/systemにあります)の後、それをtemplate/htmlフォルダーに配置します。