AspDot Net Storefront 9.x Добавить класс для каждой категории в тело

Мне нужно добавить имя каждой категории в класс тела. Я безуспешно искал способ сбросить переменную для имени категории внутри файла template.master. Я могу получить название страницы или метаинформацию, но не название категории.

Так что это будет <body class="mycategory">

Этот класс будет влиять на мой стиль на всей странице (даже за пределами entity.category.xml.config).

Обновление: Таким образом, примерная структура на сайте будет выглядеть так: «Одежда»> «Мужчины»> «Бренд 1»> «Продукт 1». Я хочу, чтобы класс отображался для всего раздела одежды независимо от того, нахожусь ли я в продукте, подкатегории или под-подкатегории.


person j3p    schedule 07.05.2015    source источник


Ответы (1)


Начните с этого в своем мастер-файле:

<body class='body <aspdnsf:XmlPackage runat="server" PackageName="bodyclass" />'>

Затем создайте пакет xml с именем bodyclass.xml.config. В этом файле добавьте это:

<xsl:if test="/root/Runtime/EntityName and /root/Runtime/EntityID">
    <xsl:text> e-</xsl:text>
    <xsl:value-of select="/root/Runtime/EntityName" />
    <xsl:text>-</xsl:text>
    <xsl:value-of select="/root/Runtime/EntityID" />
</xsl:if>

Это создаст классы, такие как e-category-53, а не имя категории, но они предоставят вам ту же гибкость. Они также будут работать для других типов объектов, таких как разделы и производители.

Еще один полезный здесь:

<xsl:text> url-</xsl:text>
<xsl:value-of select="translate(aspdnsf:StrReplace(/root/Runtime/PageName, '.aspx', ''), '.', '')" />

Это создаст класс тела на основе URL-адреса, такого как «url-c-88-sename». Это будет применяться ко ВСЕМ страницам, а не только к страницам сущностей.

person dubloons    schedule 08.05.2015
comment
Сначала я получил сообщение об ошибке, поэтому я изменил тег body на <body class='body <asp:Literal runat="server" Text="<%$ Tokens:XmlPackage, bodyclass.xml.config %>" />'>. - person j3p; 08.05.2015
comment
Теперь он включает файл, но не возвращает категорию. Если я добавляю статический текст, он отлично возвращается в класс body, но оператор if возвращается как ложный, и если я удаляю его, ничего не возвращается. Любые идеи? - person j3p; 08.05.2015
comment
Кроме того, приведенный вами пример страницы выбора работает отлично и возвращает, как и ожидалось, но ничего для имени объекта или идентификатора. Спасибо за вашу помощь! - person j3p; 08.05.2015
comment
попробуй снять если и скажи что у тебя получилось. Имена узлов немного изменились во всех 9 версиях. - person dubloons; 08.05.2015
comment
Я по-прежнему ничего не получаю, хотя это кажется странным, потому что я нахожусь в категории. Первая страница возвращает страницу просто отлично - person j3p; 08.05.2015
comment
Итак, если я просто выберу Runtime - <xsl:value-of select="/root/Runtime" />. Я получаю следующее: en-USFalse0en-USFalseUSD1en-USbodyclass.xml.configFalseFalseTruehttps://domain.com/5/8/20151/c-236-accessories.aspxfalseFalseen-USFalse129.123.28.23615False03:08 PM1USD0en-USc-236-accessories .aspxFalseFalse. Accessories.aspx меняется на название продукта, когда я нажимаю на продукт в категории. Все, что я читал, заставляет меня думать, что сущность должна быть там. - person j3p; 08.05.2015
comment
copy-of покажет вам полные узлы (вам нужно будет просмотреть исходный код). вам также следует попробовать включить отладку — результаты помогут устранить неполадки. Вы сказали, что вариант, основанный на странице, работает — разве он не должен охватывать все те же варианты использования? - person dubloons; 09.05.2015
comment
Таким образом, пример структуры на сайте будет выглядеть следующим образом: Одежда › Мужчины › Бренд 1 › продукт 1. Я хочу, чтобы класс отображался для всего раздела одежды. Когда я получаю заголовок страницы, он работает только с самой одеждой, но не работает с подкатегориями или продуктами. Добавлять классы для каждого продукта было бы безумием и сложно обновлять. Когда я делаю копию, имя объекта недоступно в качестве узла. Я попытался написать свои собственные запросы и заставил их работать для подкатегории или верхней категории, но не для продукта или под-подкатегории. - person j3p; 12.05.2015
comment
О, я неправильно понял и подумал, что вы имели в виду конкретную страницу категории - вот где EntityType и EntityID отображаются в XML-документе. - person dubloons; 13.05.2015
comment
Я думаю, что решение будет более сложным, чем вы собираетесь получить здесь. Вам нужно будет по-разному учитывать страницы категорий и продуктов. Для страниц продуктов вам понадобится собственный запрос, чтобы получить все сопоставленные категории (и убедитесь, что вы учитываете несколько сопоставлений). Затем вам нужно пройти вверх по дереву EntityHelper, чтобы добавить класс для родительских категорий. - person dubloons; 13.05.2015
comment
Попался, я надеялся, что смогу получить объект из среды выполнения или другой глобальной переменной. Я раньше не работал с aspdotnetstorefront, в большинстве программ для электронной коммерции, которые я использовал, доступна переменная категории или категория остается в URL-адресе. Я не был уверен, что я просто что-то упустил. Он выводит родителя в панировочных сухарях, но панировочные сухари, похоже, являются общесистемными функциями, я не могу найти для этого xml-файл. Я ценю вашу помощь, хотя - person j3p; 14.05.2015