NopCommerce: custom store topic

In questo post vedremo come creare su nopCommerce una pagina (topic) personalizzata a livello di store ma con stessa Url di accesso. Un'esigenza che nasce dal dover aggiungere, per esempio, una pagina con i dettagli di vendita o di spedizione del singolo store raggiungibile da un link comune a tutti.
Quando creiamo un topic è sì possibile specificare uno o più store di riferimento ed escludere l'accesso agli altri ma ogni topic deve avere una Url di accesso univoca. Ciò che più topic possono avere in comune è il System name. Sfruttiamo quindi questo per identificare l'insieme dei topic e recuperare quello corretto in base allo store corrente.

Ghost Logos

Andando ad editare uno dei ConditionOfUse:

Ghost Logos

Utilizziamo la Action già presente nel Controller Topic:

[ChildActionOnly]
public ActionResult TopicBlock(string systemName)

che svolge esattamente il compito appena descritto, visualizza quindi il topic con System name specificato e appartenente allo store corrente.

Essendo [ChildActionOnly] non è possibile accedere direttamente a mystore.it/Topic/TopicBlock/ConditionsOfUse ma è necessario utilizzare la seguente riga di codice

@Html.Action("TopicBlock", "Topic", new { systemName = "ConditionsOfUse" })

all'interno di una View. Possiamo inserirla in una View già esistente, per esempio Views/Home/Index.cshtml, o crearne una nuova. Volendo accedere al topic con mystore.it/Home/Conditions basterà aggiungere una nuova Action nel controller Home:

public ActionResult Conditions()
{
    return View();
}

con relativa View Views/Home/Conditions.cshtml

@{
    Layout = "~/Views/Shared/_ColumnsThree.cshtml";
}
<div class="page home-page">
    <div class="page-body">
        @Html.Action("TopicBlock", "Topic", new { systemName = "ConditionsOfUse" })
    </div>
</div>