2016-04-10 2 views
0

Мы новичок в DNN, и мы планируем добавить модуль продукта, который отвечает за добавление, редактирование, удаление, распечатку и отображение деталей продуктов.Как показать модуль, который используется во многих вкладках в DotNetNuke

Мы написали UserControl с именем ProductsList.ascx, в котором определены AddProducts.ascx и ShowPrdoctDetail.ascx, используя Host => Extensions => ProductsList => Определение модуля => Добавить модуль управления.

В режиме администратора мы создали страницу и перетащили модуль в нее, чтобы администратор сайта мог добавлять, редактировать, удалять и видеть детали каждого продукта.

Также есть слайд-шоу на главной странице, где представлены новейшие продукты. Кроме того, продукты отображаются в меню.

Теперь мы хотим перенаправить пользователя на страницу сведений о продукте (ShowPrdoctDetail.ascx в нашем случае) всякий раз, когда он нажал на продукт, показанный в слайд-шоу или в меню.

Мы знаем о методе Globals.NavigateUrl(), но для перехода к определенной странице и модулю необходимо перенаправить ссылку на табуд и середину, а в DNN каждая добавленная страница будет иметь разные значения tabid и mid.

Поскольку в DNN администратор может создавать много страниц и добавлять к ним этот модуль, мы не знаем, что таблид и середина мы должны передать Globals.NavigateUrl(), чтобы перейти на страницу сведений о продукте (ShowPrdoctDetail. ascx), когда пользователь нажал на определенный продукт в меню или слайд-шоу.

Любая помощь очень ценится.

ответ

0

Попробуйте сохранить текущий tabid в DB при добавлении модуля детали продукта на страницу. И с ProductId вы можете захватить tabid детали продукта и использовать его для перенаправления на правильную страницу.

0

Как я могу это сделать, это создать еще одно определение модуля для детального модуля и дать ему дружественное имя, например «Сведения о продукте», и добавить модуль модуля ShowProductDetail.ascx в качестве представления по умолчанию этого нового определения модуля.

Затем вы можете перетащить этот новый модуль на страницу для своей страницы с информацией о продукте.

В вашем основном модуле администратора продукта вы можете создать представление настроек с выпадающим списком, который содержит список всех вкладок (страниц), на которых включен модуль «Сведения о продукте».

Вы можете использовать следующий метод, чтобы получить список вкладок в портал, который имеет экземпляр модуля:

private List<TabInfo> GetAllModuleTabsbyModuleName(string friendlyName) 
{ 
    List<TabInfo> results = new List<TabInfo>(); 
    Dictionary<int, int> dups = new Dictionary<int, int>(); 

    ModuleController mc = new ModuleController(); 
    ArrayList oModules = mc.GetModulesByDefinition(base.PortalId, friendlyName); 

    TabController tc = new TabController(); 
    TabCollection oTabs = tc.GetTabsByPortal(base.PortalId); 

    foreach (ModuleInfo oModule in oModules) 
    { 
     foreach (KeyValuePair<int, TabInfo> oTab in oTabs) 
     { 
      if (oTab.Key == oModule.TabID && !dups.ContainsKey(oModule.TabID)) 
      { 
       results.Add(oTab.Value); 
       dups.Add(oModule.TabID, oModule.TabID); 
      } 
     } 
    } 
    return results; 
} 

Вы можете связать, что опции выпадающего списка и администратор может выбрать страницу который будет перенаправлен при нажатии на основной модуль.

ddlProdDetailsTab.DataSource = GetAllModuleTabsbyModuleName("Product Details"); 
ddlProdDetailsTab.DataValueField = "TabID"; 
ddlProdDetailsTab.DataTextField = "TabName"; 
ddlProdDetailsTab.DataBind(); 

Так что с настройками, вы знаете табетический вы хотите перенаправить, то вам нужно moduleId, и вы можете создать редирект с помощью NavigateURL().

var pdTab = TabController.Instance.GetTab(Convert.ToInt32(Settings["ProductDetailTabId"]), PortalId); 
var pdModule = pdTab.Modules.Cast<ModuleInfo>().FirstOrDefault(m => m.ModuleName == "Product Details"); 
var productLink = Globals.NavigateURL(pdTab.TabId, "", "mid=" + pdModule.ModuleId, "productId=" + productId);