2012-08-15 104 views
1

在PyroCMS中,我使用session:messages標記向用戶顯示消息。這很好,但我想爲每條消息添加一個關閉按鈕,這需要在每條消息中放置一個範圍。例如:會話的自定義輸出:消息?

<div class="alert success"> 
    You have logged in successfully. <span class="close">X</span> 
</div> 

每個消息被包裹在一個div,這是通過設置session:messages標記的屬性賦予一個類。沒有內置的方式來指定輸出。我如何覆蓋session.php中的messages()函數,添加一個新的屬性來追加這個關閉按鈕?

到目前爲止,我曾嘗試:

  1. 複製系統/ CMS /插件/ session.php文件爲*插件/ shared_addons /插件/ session.php文件*和修改messages()功能。使用核心功能,而不是像我所希望的那樣插入新插件。

  2. 如上所述複製插件,然後將其類更改爲My_Plugin_Session extends Plugin_Session,希望其功能將覆蓋核心Plugin_Session類。沒有運氣。

回答

3

這不是可以延長某些東西都是在覈心(e.g. libraries and helpers) - 我覺得適用於插件了。

在這種情況下,如果我是你(我可能必須爲我的下一個項目做這些事情,因爲這些可關閉的警報通常在Twitter Bootstrap等中)我只需編輯/system/cms/plugins/session .php,並將關閉按鈕的額外<span>添加到成功,通知和錯誤條件('if'語句)。

在一個典型的網站,我想不出,你會永遠需要一些警告的情況不同的方式顯示給他人(不是依賴於過程的結果,你可以在CSS使用類做不同的顏色等名稱)。

提供你使用Git(你克隆或分叉的official PyroCMS repository並提出自己的分支),你會與未來的更新絕對沒問題 - 如果在未來的版本中會插件改變,任何改變都會只是自動合併到您的代碼中,或者如果Git無法解決它,它會向您顯示差異並提示您手動修復它。

注意 - 有一對夫婦爲基礎的管理界面上這一特定問題的其他解決方案(你可能已經注意到了閃光燈的消息有可關閉)。

您可以創建一個部分 - 可以包含PHP,而不僅僅是Lex標籤 - 例如看到/system/cms/themes/pyrocms/views/admin/partials/notices.php像這樣的東西(視需要進行修改和複製的通知和錯誤):

<?php if ($this->session->flashdata('success')): ?> 
<div class="alert success"> 
    <?php echo $this->session->flashdata('success'); ?> 
</div> 
<?php endif; ?> 

PyroCMS管理實際使用liveQuery到附加在瀏覽器
源關閉按鈕<span>/系統/ CMS /模塊/所見即所得/ JS /所見即所得。JS

// Add the close link to all alert boxes 
$('.alert').livequery(function(){ 
    $(this).prepend('<a href="#" class="close">x</a>'); 
}); 
+0

我使用liveQuery漸進增強方法來確保沒有使用Javascript的人(可能還有一個人)沒有看到關閉按鈕。這是一個關於部分接受PHP的好建議!我會在不久的將來利用這一點。 – 2012-08-16 12:35:21

2

我這樣做,它是完美工作,不需要其他插件的jQuery比。

在模板佈局補充一點:

{{ session:messages success="message success" notice="message info" error="message error" }} 

的JavaScript

$(function() { 
    $('.message').prepend('<a class="baxclose" id="baxclose"></a>'); 
    $('#baxclose').click(function(){ 
     $('.message').fadeOut('slow'); 
    }); 
}); 

和CSS:

a.baxclose{ 
    float:left; 
    width:30px; 
    height:30px; 
    background:transparent url(../img/close-icon.png); 
    margin-top: -30px; 
    margin-left: -30px; 
    cursor:pointer; 
} 
.message { 
    padding: 20px 20px; 
    -moz-border-radius: 3px; 
    -webkit-border-radius: 3px; 
    border-radius: 3px; 
    margin-bottom: 10px; 
    -moz-box-shadow:inset 0 2px 3px rgba(255,255,255,0.5), 0 2px 3px rgba(0,0,0,0.1); 
    -webkit-box-shadow:inset 0 2px 3px rgba(255,255,255,0.5), 0 2px 3px rgba(0,0,0,0.1); 
    box-shadow:inset 0 2px 3px rgba(255,255,255,0.5), 0 2px 3px rgba(0,0,0,0.1); 
    zoom: 1; 
    margin-bottom: 20px; 
} 
    .message h3 { 
     margin-top: 0; 
     font-size: 12px; 
     font-weight: bold; 
    } 
    .message p { 
     margin-bottom: 0; 
    } 

.message.info { 
    border: 1px solid #cadcea; 
    background-color: #cdf; 
    background-image: -o-linear-gradient(top, #eef, #cdf); 
    background-image: -ms-linear-gradient(top, #eef, #cdf); 
    background-image: -moz-linear-gradient(top, #eef, #cdf); 
    background-image: -webkit-gradient(linear, left top, left bottom, from(#eef), to(#cdf)); 
    background-image: -webkit-linear-gradient(top, #eef, #cdf); 
    background-image: linear-gradient(top, #eef, #cdf); 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EEEEFF', endColorstr='#CCDDFF'); 
    color: #225b86; 
    text-shadow: 0 1px 1px #fff; 
} 

.message.error { 
    border: 1px solid #eeb7ba; 
    background-color: #fae2e2; 
    background-image: -o-linear-gradient(top, #fae2e2, #f2cacb); 
    background-image: -ms-linear-gradient(top, #fae2e2, #f2cacb); 
    background-image: -moz-linear-gradient(top, #fae2e2, #f2cacb); 
    background-image: -webkit-gradient(linear, left top, left bottom, from(#fae2e2), to(#f2cacb)); 
    background-image: -webkit-linear-gradient(top, #fae2e2, #f2cacb); 
    background-image: linear-gradient(top, #fae2e2, #f2cacb); 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fae2e2', endColorstr='#f2cacb'); 
    color: #be4741; 
    text-shadow: 0 1px 1px #fff; 
} 

.message.success { 
    border: 1px solid #b8c97b; 
    background-color: #e5edc4; 
    background-image: -o-linear-gradient(top, #e5edc4, #d9e4ac); 
    background-image: -ms-linear-gradient(top, #e5edc4, #d9e4ac); 
    background-image: -moz-linear-gradient(top, #e5edc4, #d9e4ac); 
    background-image: -webkit-gradient(linear, left top, left bottom, from(#e5edc4), to(#d9e4ac)); 
    background-image: -webkit-linear-gradient(top, #e5edc4, #d9e4ac); 
    background-image: linear-gradient(top, #e5edc4, #d9e4ac); 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e5edc4', endColorstr='#d9e4ac'); 
    color: #3f7227; 
    text-shadow: 0 1px 1px #fff; 
} 
+2

正確!您可以更改正在使用的類,但不能更改整個HTML。爲此,您可以使用PHP或自己的標籤進行自定義。 – 2012-09-06 16:12:13

0

而不是使用刪除的按鈕,另一種選擇是woul d是在點擊事件時創建淡出消息。

HTML:

<div id="msgAlert"> …session:messages goes here...</div> 

JS:

<script type="text/javascript"> 
$('html').click(function() { $('#msgAlert').delay(5000).fadeOut('slow'); }); 

有一個點擊後5秒將淡出會話消息。