Создание тем ASP.NET вместе с пользовательскими изображениями и CSS

У нас есть решение ASP.NET, использующее изображения, файлы css и .skin в App_Theme / {selected theme}. Сегодняшние темы содержат много-много файлов и изображений, а для клиентской темы мы добавляем новую папку в App_Themes, копируем все файлы в новую папку и вносим 10-200 изменений в изображения, скины и CSS.

Проблема здесь в том, что тема по умолчанию, та, которую мы обычно используем при разработке, развивается и растет, делая тему клиента устаревшей. Поэтому, когда приходит обновление, мы должны просмотреть все файлы в поисках изменений и, надеюсь, найти их все. Иногда мы упускаем из виду действительно важные вещи.

Идеальным решением было бы иметь базовую тему, содержащую базовый CSS, скин и изображения. И когда мы добавляем новую клиентскую тему, мы только сообщаем системе, что было изменено, какие CSS-селекторы переопределить и какие изображения использовать вместо изображений из базовой темы. Насколько я понимаю, при использовании обычных функциональных возможностей темы ASP.NET в папке App_Themes вы можете иметь только ОДНУ тему, а не тему BASE, а затем сказать тему DeliveryCustomer с другим фоном и некоторые другие изображения, которые решение должно использовать вместо этого. из тех, что в BASE-теме.

Есть ли у кого-нибудь рекомендации по решению этой проблемы в будущем. Я видел, что люди переопределяют путь App_Theme, чтобы он работал с пользовательскими скинами.

Благодарность!


person hannes larsson    schedule 08.12.2011    source источник


Ответы (2)


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

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

<link rel="stylesheet" type="text/css" href="/styles/base.css" /> <!-- Note this isn't in app_themes -->

Затем убедитесь, что ваши файлы CSS в различных темах указывают только дельту для ваших стилей.

person wsanville    schedule 08.12.2011
comment
Спасибо! но дело в том, что .skin-файлы могут быть загружены только из папки App_Theme (если не используется способ перехвата этого пути при рендеринге). Я все еще работаю над решением, которое, как мне кажется, сработает. Есть ли у кого-нибудь подобный случай, когда у вас есть базовая тема, а затем каким-то образом специфичные для клиента части? - person hannes larsson; 08.12.2011
comment
Вам действительно нужны файлы скинов? Я просто придерживаюсь классов CSS для элементов управления ASP.NET. - person wsanville; 08.12.2011
comment
С моей точки зрения, нет, я не думаю, что нам нужны файлы .skin, но остальная часть команды делает это, поэтому я должен это учитывать. В противном случае ваше решение идеально подходит для того, что мне нужно. - person hannes larsson; 08.12.2011

Хорошо, вот как я это сделал. Я создал тему по умолчанию, которая является исходной темой со всеми необходимыми css-файлами, файлами скинов и изображениями, и это очень много. Эта тема находится в папке App_Themes. Я создал новую папку под названием ThemeSkins рядом с папкой App_Themes. В этой папке у меня все новые скины в разных папках. Имя папки - это имя новой темы, которую нужно иметь. В каждой из папок скинов есть css-файлы, содержащие только те селекторы, которые я хочу перегрузить. Также есть изображения, которые я хочу заменить.

Я создал инструмент ThemeCreator, который выполняет три функции:

  • Удалите все темы, кроме темы по умолчанию, в папке App_Themes. Это сделано для того, чтобы у разработчиков была только одна основная тема. В ThemeSkins по-прежнему будет работать, но общая нагрузка будет минимальной.
  • Затем инструмент просматривает папки в ThemeSkins и создает папку в App_Themes для каждого скина со своим именем. Затем он копирует тему по умолчанию во все новые папки скинов, которые он только что создал.
  • Последнее, что он объединит файлы, специфичные для скина, во вновь созданный скин в App_Themes и позволит пользователю узнать, какие файлы были добавлены только для информации. Инструмент добавляет префикс «z_» ко всем css-файлам, так что они загружаются последними из всех css-файлов и поэтому будут перегружать селекторы по умолчанию.

Осталось обновить скин-файлы, пока ни одному заказчику не понадобилось вносить изменения в эти файлы. Но когда они это сделают, я думаю, я просто добавлю файлы скинов и мне придется автоматически обновлять значения по умолчанию, поскольку маркеры скинов не могут быть перегружены, как это могут сделать селекторы css.

Это работает очень гладко и дает нам приятный и простой способ работы со скинами в наших темах. Кто-нибудь знает, как получить тот же результат? Основная проблема с использованием тем ASP.NET заключается в том, что вы не можете использовать тему по умолчанию, а затем просто применять к ней скины без использования атрибутов формы и цвета в файлах скинов. Это не рекомендуется, поскольку файлы скинов будут копировать все атрибуты во все места, где они нужны в разметке, а не просто ссылаться на них, как это делают классы css.

person hannes larsson    schedule 13.12.2011