簡體   English   中英

共享項目時如何檢測並向編輯者顯示?

[英]How can I detect and display to editors when an item is shared?

我們有一個大型站點,並且有一些實例在 5 到 12 個頁面上共享和重復使用單個基本內容項。 該網站有 10 多名編輯,其中至少有一半是不經常使用的,因此不記得這些項目已共享是一個重復的問題。 他們不斷更改一頁上的內容,添加一些細節,然后在一個或多個其他頁面上看起來很奇怪、破碎或非常不合適。

我想要做的是向檢測到共享項目的視圖添加一些代碼,然后添加一個指示器。 顯然,這將是完美的:

if(Content.IsSharedItem) {
  // add a nice blue, round 2sxc style button with a 
  <i class="fas fa-share-alt"></i>
}

我瀏覽了 API,但除了編寫一些 LINQ(可能是處理器密集型的)之外,我還沒有發現任何方法來實現 .IsSharedItem 之類的東西

有什么想法或建議嗎? 是否存在我可能不知道或以我沒想過要搜索的方式命名的內置內容? 任何幫助將不勝感激。 先感謝您。

DNN 9.03.02、2sxc 10.9.1、內容應用程序 3.03

實際上有:)。 讓我們假設共享意味着“它已被手動分配給一個模塊”。 在這種情況下,還有另一個實體引用了您感興趣的實體。

基本上,如果您詢問任何 .Parents("2SexyContent-ContentGroup") 項目,您應該獲得所有引用它的內容組。

請記住,有些可能會被刪除等,因此它不是 100% 可靠或需要更多工作。

我看不到如何從 .Parents() 到 TabID,所以我意識到,我們正在模塊中執行,所以只需執行Dnn.Module.ModuleSettings["ToSIC_SexyContent_ContentGroupGuid"]即可Dnn.Module.ModuleSettings["ToSIC_SexyContent_ContentGroupGuid"]您的需求。 然后 DNN 沒有 API 方法來反轉 ModuleSetting.SettingValue,例如沒有 GetModulesByModuleSettingValue() 類型的東西。 所以 SQL 開始變得有意義了,而我卻這樣做了……

如果有人有辦法改善這一點,我會非常感興趣。 更好的查詢? 沒有SQL的方法嗎? 重構或簡化一些事情? 例如,添加 TabName 是事后的想法,可能應該在 SQL 中完成。

將此添加到任何內容項視圖,將其包裝在 if(Edit.Enabled) 或其他內容中,以便只有編輯/管理員才能看到它。

@if(Edit.Enabled) {
  @RenderPage("_Shared__ContentGroup-Info.cshtml")
}

將此保存為文件名_Shared__ContentGroup-Tabs.cshtml (上圖)

@using System.Data
@using DotNetNuke.Data
@using DotNetNuke.Entities.Tabs

@*
    This sub template is intended to
    a) reveal whether or not the Content item is shared and
    b) show links to those pages

    Reminder the .Parents("2SexyContent-ContentGroup")..EntityGuid is what is stored in
    Dnn.Module.ModuleSettings["ToSIC_SexyContent_ContentGroupGuid"]
*@

@{
  string sql = @"
      SELECT DISTINCT TabID
      FROM TabModules
        INNER JOIN ModuleSettings ON TabModules.ModuleID = ModuleSettings.ModuleID
      WHERE ModuleSettings.SettingValue = '{0}'";
  sql = string.Format(sql, Dnn.Module.ModuleSettings["ToSIC_SexyContent_ContentGroupGuid"]);
  IList<int> tabs;
  using (IDataContext db = DataContext.Instance()) {
      tabs = db.ExecuteQuery<int>(CommandType.Text, sql).ToList();
  }
}
<pre>
This Content item is shared to @(tabs.Count - 1) other page(s)
@foreach(int tabId in tabs
  .Where(t => t != Dnn.Tab.TabID)
) {
<a href="/tabid/@tabId)">@TabController.Instance.GetTab(tabId, Dnn.Portal.PortalId).TabName</a>
}
</pre>

示例輸出: 屏幕剪輯,示例輸出

那么,既然我們已經在頁面上安裝了 Bootstrap 4 和 Fancybox,我就能夠將實驗變成一個工作 UI,大約再玩 5 分鍾:

簡單的UI實現演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM