Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
08:58
25 дек
#
написал:

В начале сотрудничества студий с изготовителями шаблонов и готовых сборок, всегда возникает техническая заковырка - как быстро поднять личный демо сайт студии или воспользоваться демками изготовителя, но притом каким-то образом обрезать там все ссылки на сайт изготовителя. Чтобы клиент студии всегда оставался на студийной "территории", а сайт изготовителя не обратился бы невольно в конкурента. Опишем несколько путей решения обозначенной трудности.

Физическая копия демо сайта

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

Но при таком подходе мы точно уверены, наш демо сайт будет содержать только те ссылки. Из недостатков следует отметить необходимость ручной синхронизации обновлений.

Демо сайт на фрейме

Это когда мы показываем демо сайт через незаметное "окошко" на своей страничке. Будто накрыли чужой сайт своим фантиком, и всё выглядит так, словно это на нашем сайте находится столько демок. При данном подходе собственный демо сайт запускается хоть за минуту, отсутствует проблема синхронизации обновлений. А недостаток в том, что если визитёр откроет внутрифреймовую ссылку в новом окне, реальный сайт выскочит из-под нашей обёртки.

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

Назначение

  • Для частных вебмастеров или студий, кто хотел бы продавать со своего сайта имперские шаблоны и сборки без нужды поднимать у себя копию демо сайта, а просто обернуть его своим фреймом с возможностью порезать посторонние ссылки.
  • О принципах порезки поговорим ниже, а сначала...

Как использовать

  • Качаете этот файл из раздела наших примеров и размещаете на своём сайте, например по адресу http://ваш.сайт/demo.html
  • Когда в какой-то момент вы сделали и разместили у себя на сайте продажную страницу очередного товара, допустим это будет некая сборка AutoDrive, то демо ссылкой станет адрес с хешем ИмяСборки, например http://ваш.сайт/demo.html#AutoDrive

Смотрите вот этот живой пример.

Как скачать

  • Когда будете смотреть живой пример, нажмите прямо в его шапке, а ещё лучше на корневой странице того примера, правую кнопку мыши, из выпавшего меню выберите Сохранить как... и далее тип Веб-страница полностью
  • О настройке под себя скажем ниже, а сейчас...

Принцип порезки

  • Когда клиент щёлкнул по вашей демо ссылке, во фрейм грузится соответствующий демо сайт, а затем вызывается функция fixDemo в том файле.
  • Сейчас эта функция пустая, то есть ничего не делает.
  • Впишите туда свой алгоритм: что хотите поменять "на лету" в странице загрузившегося демо фрейма. Например пробежать по DOM-дереву документа и заглушить все ссылки с атрибутом href, равным абсолютной ссылке вне текущего демо сайта.

Пример алгоритма

  • Предположим, мы хотим найти все ссылки, начинающиеся с http://, и если какая-то не равна валидному адресу, заменить ссылкой на ваш лендинг.
  • Под переменной frameDoc ниже понимаем указатель на документ загрузившегося фрейма.
var pattern = 'a[href^="http://]',
    valid = 'http://demo.imperacms.com/',
    landing = 'http://ваш.сайт/hello',
    url, i;

var items = frameDoc.querySelectorAll(pattern);
for (i = 0; i < items.length; i++) {
    url = items[i].getAttribute('href');
    if (url.indexOf(valid) !== 0) {
        items[i].setAttribute('href', landing);
    }
}

Когда не сработает порезка

  • Политика безопасности браузера запрещает доступ к контенту фрейма из несовпадающего или недоверенного домена.
  • Поэтому пока мы не внесём домен вашего сайта в CROSS DOMAIN POLICY официального демо сайта, браузер будет блокировать любые ваши алгоритмы манипуляции frameDoc.

Настройка файла под себя

  • Когда вы скачали выше упомянутый файл, следует заменить в нём демо-тексты. Перечислим их расположение в файле сверху вниз:
    • Тег <title> - здесь напишите дефолтный заголовок вашего демо сайта.
    • Контент тега <header> - исправьте логотип, телефон, адрес ссылки "другие".
    • Функция gotoBuy - впишите посадочный URL товарных страниц на вашем сайте, удалите строку-заглушку return alert(...).
    • Функция fixDemo - напишите свой алгоритм порезки контента загрузившегося демо.
    • Тег <section> - этот текст, который сейчас читаете, удалите этот тег вообще или перепишите его контент.
    • Тег <footer> - удалите вообще или исправьте его контент на свой.

Надеемся вам тоже понравится такой способ постановки демо сайта, и предложенный выше файлик с простенькой реализацией окажется полезным началом большого сотрудничества. Ведь Импера заметна в среде веб-разработок не только производством новых методик, а также высоким качеством изготовляемых собственно или курируемых ею изделий других изготовителей, но и очень выгодными партнёрскими предложениями.

18:18
26 дек
#
?
написал:

Даже главная есть) Спасибо.

Теперь минусы. Надо было fixDemo написать базовый, хоть под комментарий. Не понятно же frameDoc откуда взялся.

Тег section. Вы предлагаете удалить. ????? Главная ведь, там список шаблонов. Вот боковой aside это под нож.

И недостаток html файла. Список на главной руками надо писать. Автоматизировать можно?

14:12
27 дек
#
?
tritonic написал:
Разработчик написал: пока мы не внесём домен вашего сайта в CROSS DOMAIN POLICY

Так могли в http://demo.imperacms.com/.htaccess разрешить get-запросы к вам с любого источника без проверки полномочий. Вот

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "GET"
    Header set Access-Control-Allow-Credentials "false"
</IfModule>

если сервак не apache, просто

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET"
Header set Access-Control-Allow-Credentials "false"
Анатолий написал: Не понятно же frameDoc откуда взялся

Смотрите строку 2.

function fixDemo ( frm ) {
    var frameDoc = frm.contentWindow.document,
        items = frameDoc.querySelectorAll('a[href^="http://]'),
        url;
    for (var i = 0; i < items.length; i++) {
        url = items[i].getAttribute('href');
        if (url.indexOf('http://demo.imperacms.com/') !== 0) {
            items[i].setAttribute('href', 'http://ваш.сайт/hello');
        }
    }
}

Только не сработает это. Механизм Same-Origin предотвращает доступ к свойствам ифрейм окна, если его url имеет иной протокол, хост или порт. Ведь документ http://pupkin.site/demo.html ифреймит http://demo.imperacms.com/ - другой хост.

Исключение когда домен imperacms.com предоставит вам домен 3-го уровня для вашего html. Что-то такое получится http://pupkin.imperacms.com/demo.html и притом в инциализации скрипта html обязательно должны заявить, что приравниваете свой документ тому же origin, что родитель demo.imperacms.com.

function init () {
    document.domain = 'imperacms.com';
    ...
}
18:59
27 дек
#
написал:

Спасибо за плодотворное обсуждение. Я обновил html-файл. В коде скрипта появилась переменная ajaxModeOn, по умолчанию установлена чтобы работало как сейчас - показ демок без динамического изменения их контента. Если установить равным true, будет производить изменение согласно логике функции fixDemo (она тоже слегка изменилась).

Написание ответа

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


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.