User Tools

Site Tools


ru:new_rotation_hints

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_hints [2016/04/27 09:53]
admin
ru:new_rotation_hints [2024/02/11 08:35] (current)
admin [Suggestions Based on logged searches]
Line 1: Line 1:
 +====== New Rotation Hints ======
 +
 +===== Setting GET parameters  =====
 +
 +Это один из важных пунктов, который надо обязательно понять, потому что далее он много где используется. 
 +Как уже было сказано в [[New Rotation Templates#How it works]] все страницы в новой ротации формируются фактически одним скриптом и получается разный результат в зависимости от входных паратмеров. Грубо говоря /scj/tube/index.php?group_name=phones выведет тумбы группы phones, а /scj/tube/index.php?group_name=cars - выведет тумбы группы cars. Хотя на сайте это будет выглядеть как /category/phones/ и /category/cars/ - красивые урлы получаются благодаря реврайтам ([[New Rotation Faq#что такое реврайты mod rewrite]])
 +
 +В данном примере /scj/tube/index.php?group_name=phones конкретно group_name=phones это GET параметры. 
 +
 +Основная суть которую надо понять в этом пункте: скрипту /scj/tube/index.php можно передавать параметры разными способами.
 +
 +**Вариант 1**
 +
 +Прямой когда вы так и пишете /scj/tube/index.php?group_name=phones . 
 +Тут единственный нюанс, который как мне кажется знают все кто работает в интернете больше 3х дней, это как перечислять парамтеры. Конкретно после имени файла ( в данном случае) идет "?" (знак вопроса), а параметры между собой разделяются & (амперсант)
 +
 +**Вариант 2 - Через реврайты **
 +
 +Например мы хотим вывести группу phones опредленныv темплейтом. В варианте 1 это выглядело бы как /scj/tube/index.php?group_name=phones&force_template=super_template что не сильно красиво. Поэтому мы пишем реврайт
 +
 +  RewriteRule ^super_phones\.html$ /scj/tube/index.php?group_name=phones&force_template=super_template
 +
 +и урл будет красивым - http://yourdomain/super_phones.html.
 +
 +**Вариант 3 - через файл **
 +
 +Вариант с реврайтами хороший, но в нем есть 2 проблемы: бывают сайт без апача, те чисто на nginx например, который .htaccess файлы не читает и соответственно прописанные там реврайты не работают. И если реврайтов очень много это начинает грузить проц. 
 +
 +Кроме того в реврайтах тяжелее делать гибкие условия, и потому есть вариант 3.
 +
 +Та же задача: красивый линк для /scj/tube/index.php?group_name=phones&force_template=super_template. Создаем файл super_phone.php с содержанием 
 +
 +<code>
 +<?php
 +$_GET['group_name'] = 'phones';
 +$_GET['force_template'] = 'super_template';
 +include('./scj/tube/index.php');
 +</code>
 +
 +и получаем красивый урл http://yourdomain/super_phones.php
 +
 +Но плюс этого варианта еще и в том, что параметры можно гибко менять прямо на пхп под какие то условия, котоыре не предусмотрены в скрипте , например 
 +
 +<code>
 +<?php
 +$_GET['group_name'] = 'phones';
 +
 +// тут меняем темпелйт в зависимости от рефера
 +if ($_SERVER['HTTP_REFERER'] == 'гугл') {
 +   $_GET['force_template'] = 'super_template_for_google';
 +} else {
 +   $_GET['force_template'] = 'super_template_for_traders';
 +}
 +
 +include('./scj/tube/index.php');
 +</code>
 +
 +
 +
 +
 +===== Как сделать по умолчанию сортировку по дате, те фактически без ротации на морде, как обычный туб =====
 +
 +  * Создайте на корне домена файл main.php вида 
 +<code>
 +<?php
 +$_GET['order'] = 'date';
 +include('./scj/tube/index.php');
 +</code>
 +  * Пропишите ПУТЬ (НЕ УРЛ !!!) к этому файлу в Settings - CJPages (до этого у вас там скорее dcuj был прописан путь к scj/tube/index.php - эту строку удаляйте, должна остаться только 1 строка с путем к main.php)
 +  * Все.
 +
 +
 +===== Как организовать трейд по группам с использованием новой ротации (реврайтами) =====
 +
 +Для начала как траффик попадает от трейдера к вам:
 +
 +**У трейдера многонишевый сайт:** 
 +  * Проще всего настроить редирект в нужную нишу по реферу (это в [[Tube CMS Pages#redirects]] )
 +  * Там же можно настроить и кастом слова если называния ниш трейдера сильно не совпадают с вашими
 +
 +**У трейдера однонишевый сайт** 
 +  * либо у него домен содержит кейворд ниши, что довольно частая ситуаиця и его будет и так редиректить в нужную нишу
 +  * либо добавьте его домен в кастом редиректы по нишам
 +
 +Все. Больше ничего для простых вариантов делать не надо.
 +
 +**Если по каким-то неизвестным причинам авторедирект вам не походит и вы хотите old-style с настраиванием каждого трейдера отдельно то варианты следующие:**
 +  - создаете реврайт например
 +  RewriteRule ^niche\.php$ /?niche_name=niche
 +  и просите трейдера слать http://yourdomain/niche.php
 +  - вариант 2 это создать файлик например niche.php вида 
 +<code>
 +<?php
 +$_GET['group_id'] = 21; // это ид ниши ротации
 +include('./scj/tube/index.php');
 +</code>
 +и далее либо трейдер сразу шлет на http://yourdomain/niche.php либо заходим в редактирование трейдера и выставляем ему niche.php как персональную страницу.
 +
 +
 +Если вы используете какой-то из сложных вариантов - опишите плз почему. Надо добавить пример зачем это может быть надо.
 +
 +
 +**Теперь раздача по группам на ауте.**
 +
 +
 +**Вариант 1**
 +
 +  * Создайте группы для трейда, названия группы трейда должно совпадать с названием групп ротации. В Апдейте 45 в rotation - groups даже появилась специальная кнопочка, которая копировала назыания групп.
 +  * добавьте реврайт. Как видите в нем в линке к ауту учтена группа
 +<code>
 +RewriteRule ^gal/(.*)/(.*)/index.html?(.*)$ /scj/cgi/out.php?link=images/%{QUERY_STRING}&group=$1&url=content&slug=$3
 +</code>
 +  * и поменяйте сабтемплейт которым выводятся тумбы, что бы линки были примерно такие
 +<code>
 +a href='/gal/<!--GROUP_NAME-->/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->'
 +</code>
 +
 +
 +Как не сложно заметить тут через реврайт передается имя группы.
 +
 +**Вариант 2**
 +
 +В апдейте 48 появилась фича Trade by groups
 +
 +У нас классический мультинишевый сидж, мы хотим трейдить по группам. Для этого надо добавить &group=... в урле, однако для сидже туба с реврайтами это не так удобно и красиво как хотелось бы. Те если по дефолту линки выглядят как /gallery/cool_gal/index.html, то для трейда по группам нам надо сделать что-то вроде /gallery/current_group/cool_gal/index.html + немного поменять реврайт, что бы ауту был передан параметр группы. Для кого это сложно есть другой вариант. 
 +
 +Если вы используете дефолтные реврайты значит у вас страницы категорий имеют урл типа /category/123/asian/ или просто /category/asian/, значит если человек кликает в этой категории, то на ауте мы можем определить в какой категории был сделан клик по реферу, и в зависимости от категории слать на разные группы трейдеров.
 +
 +Итого, дабы заюзать эту функцию надо:
 +
 +  - Если у вас еще не созданы, то создать группы трейда с именами как категории ротации. Кстати сделать это можно одним кликом в Rotation - Groups (Copy To Trade Groups)
 +  - Распределить трейдеров по группам
 +  - Rotation - CMS - Tube settings включить опцию Niche trade
 +  - все :)
 +
 +
 +
 +**Вариант 3**
 +
 +Обычно на мультинишевом сидже довольно много ниш, больше чем ниш в которых хотелось бы распределить трейдеров, например 500 ниш в ротации, а трейдеров хотелось бы распределить только по 15 группам. 
 +
 +  * Создайте группы для трейда, допустим тех же 15 штук, названия могут совпадать или не совпадать с названиями групп ротации - это не важно.
 +  * в группах ротации найдите поле custom var1 и для каждой группы ротации пропишите имя трейд группы которая будет использована
 +  * добавьте реврайт. Как видите в нем в линке к ауту учтена группа
 +<code>
 +RewriteRule ^gal/(.*)/(.*)/index.html?(.*)$ /scj/cgi/out.php?link=images/%{QUERY_STRING}&group=$1&url=content&slug=$2
 +</code>
 +  * и поменяйте сабтемплейт которым выводятся тумбы, что бы линки были примерно такие
 +<code>
 +a href='/gal/<!--GROUP_CUSTOM_VAR1-->/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->'
 +</code>
 +
 +
 +===== Thumbs' Rolling  =====
 +
 +Ролинг тумб - с одной гали мы берем например 5 тумб в ротацию, дабы найти лучшую. Можно по наведении мышки на тумбу устроить ролинг тумб с галеры. Такой подход развит в тубах, в пиксовых сайтах такого не было еще ( [[http://demo.smartcj.com/cat/14/7%20Demo2%20%20Taylor/ctr/1/content_list_pic/image/|Вот пример для пиксовой галеры]], надо навести выш на любую тумбу и подождать долю секунды) и конечно же такой же вариант [[http://demo.smartcj.com/cat/14/7%20Demo2%20%20Taylor/ctr/1/content_list_mov/movie/|для мувисных галер]].
 +
 +Сделать очень просто:
 +  * в темплейт добавляем JS код, который устраивает ролинг для всех картинок, ИД которых начинается на rot 
 +<code>
 +
 +<script src='/scj/includes/js/jquery.js'></script>
 +
 +<script>
 +$(document).ready(function() {
 +
 + $("img[id^=rot]").bind('mouseenter', function() {
 + $(this).attr('rotating', 1);
 + StartSlide($(this).attr('id'));
 + }).mouseleave(function() {
 + $(this).attr('rotating', 0);
 +        if ($(this).attr('original_src')) $(this).attr('src', $(this).attr('original_src'));
 + });
 +
 +});
 +
 +
 +function StartSlide(id) {
 + if (!$('#' + id).attr('rotating') || $('#' + id).attr('rotating') == 0) return false;
 +
 +    if (!$('#' + id).attr('original_src')) $('#' + id).attr('original_src', $('#' + id).attr('src'));
 +
 + var images = $('#' + id).attr('original_src') + ',' + $('#' + id).attr('rel');
 +    images = images.split(',');
 +    var cur = $('#' + id).attr('current_img');
 +
 +    cur = parseInt(cur);
 +    cur = (!cur || cur == 0) ? 1 : (cur+1);
 +
 +    cur = (!images[cur]) ? 0 : cur;
 +    $('#' + id).attr('current_img', cur);
 +
 +  var preload = new Image();
 +
 + if (cur == 0) {
 + preload.src = $('#' + id).attr('original_src');
 + } else {
 + preload.src = images[cur];
 + }
 +
 +    if ($('#' + id).attr('rotating')) setTimeout("ChangeSRC('"+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>
 +
 +</code>
 +
 +  * тут ролинг для тумб, ИД которых начинается с 'rot'. Саб будет выглядеть примерно так:
 +<code>
 +
 +<a href="/gallery/<!--SAFE_DESC-->/<!--GALLERY_ID-->/index.html?<!--THUMB_LINK-->" title="<!--ALT-->">
 +<img id='rot<!--GALLERY_ID-->' src="<!--THUMB_URL-->" class="t_img" alt="" rel="<!--ALL_THUMBS-->" />
 +</a> 
 +</code>
 +
 +тут 2 момент,на которых и работает роллинг: 
 +<code>
 +id='rot<!--GALLERY_ID-->' - скрипт делает роллинг только тех тумб, у которых ИД начинается с rot 
 +rel="<!--ALL_THUMBS-->" - тут скрипт перечисляет все доступные тумбы для этой галеры
 +</code>
 +
 +
 +===== Custom pagination =====
 +
 +В mysql есть 2 варианта выборки из базы: когда считается общее кол-во результатов по запросу и когда нет. Второй вариант быстрее. Соответственно, когда нет макроса <pagination скрипт думает, что точные числа не нужны, например используется prev\next, и делает запрос 2м вариантом. 
 +
 +Поэтому если надо своя навигация и точное число TOTAL_ITEMS - надо вставить что-то вроде 
 +
 +<code>
 +
 +<!--
 +<pagination>
 +.
 +</pagination>
 +-->
 +
 +</code>
 +
 +те навигация есть, но в html комменте, при этом скрипт посчитает <!--TOTAL_ITEMS--> и вы сможете дальше использовать это число в своем коде.
 +
 +Вы можете сделать любую на свой вкус. Например
 +
 +<code>
 +
 +$total_pages = ceil(<!--TOTAL_ITEMS-->/100);
 +for ($i = 1; $i <= $total_pages; $i++) {
 +echo "<a href='/?page={$i}'>{$i}</a>";
 +}
 +</code>
 +
 +где 100 - это кол-во тумб у вас на странице (его вы занете, тк сами создаете теплейт). Это простой пример, конечно вы можете разнообразить так как вам надо для конкртеной страницы.
 +
 +
 +**Вариант 2**
 +
 +В большинстве случаев серферам 25я страница совершенно не нужна и люди туда в большинстве случаев не ходят, поэтому имеет смысл ограничить их например 5 иил 10ю страницами и просто вписать их в темплейт как есть 
 +
 +<code>
 +<ul class="pages">
 +<li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/" title="1">1</a></li>
 +<li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/2/" title="2">2</a></li>
 +<li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/3/" title="3">3</a></li>
 +</ul>
 +
 +Для красоты можно выделять текущую страницу например
 +
 +<li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/" title="1"> 1 вот тут </a></li>
 +добавляем код и получается
 +<li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/" title="1"> <? if ($_GET['page'] == 1) ? '<b>1</b>' : '1' ?>   </a></li>
 +и тоже самое для остальных страниц.
 +
 +</code>
 +
 +
 +
 +===== Separate page for a list of categories  =====
 +**Варианта 2
 +
 +Первый
 +**
 +
 +1. Создаем кастом темпелйт, например cat_template в котором вывод самих категорий например 
 +<code>
 +<category order=clicks num=1-20>
 +<a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/?<!--THUMB_LINK-->" title="<!--CATEGORY_NAME-->"><img src="<!--THUMB_URL-->" class="t_img" alt="" /></a>
 +</category>
 +</code>
 +
 +
 +2. эта страница будет видна по ссылке /scj/tube/?force_template=cat_template
 +
 +3. что бы получить красивую ссылку добавим реврайт
 +<code>
 +RewriteRule ^categories$ /?force_template=cat_template
 +</code>
 +
 +и страница будет открываться по ссылке domain.com/categories
 +
 +
 +**Вариант 2**
 +
 +1. Создаем кастом темпелйт, например cat_template в котором вывод самих категорий например 
 +<code>
 +<category order=clicks num=1-20>
 +<a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/ctr/1/?<!--THUMB_LINK-->" title="<!--CATEGORY_NAME-->"><img src="<!--THUMB_URL-->" class="t_img" alt="" /></a>
 +</category>
 +</code>
 +
 +2. созадем файл categories.php на корне домена в котором
 +<code>
 +<?php
 +$_GET['force_template'] = 'cat_template';
 +include('./scj/tube/index.php');
 +</code>
 +
 +
 +3. страница доступна по ссылке domain.com/categories.php
 +
 +
 +===== Sitemap =====
 +
 +По дефолту сайтмап у вас есть в scj/sitemap.php но если вдруг почему то его нет, то
 +
 +1. Создайте темплейт sitemap (начиная с апдейта 46 он есть в дефолтных темплейтах) с содержимым вроде
 +<code>
 +<!--default_1-1000-->
 +</code>
 +
 +и сабтемплейтом в соответствии с форматом сайтмап.
 +
 +2. на корне домена создайте файл sitemap.php 
 +<code>
 +<?php
 +
 +define('CACHE_TIME', 86400);
 +$_GET['force_template'] = 'sitemap';
 +$_GET['skip_cell_settings'] = true; // skips cell K calculation - saves a bit of processor time
 +// $_GET['custom_galleries'] = true; // uncomment this line if you need only custom galleries in site map
 +header('Content-Type: application/xml');
 +include('./scj/tube/index.php');
 +</code>
 +
 +
 +Обратите внимание, что если вы юзаете описания в которых есть спецсимволы, например & (амперсант) то в темпелйте надо использовать CDATA (если не в курсе что это такое то имеет смысл открыть google).
 +
 +__Учитывая что этот пункт доки мог быть написан довольно давно относительно момента когда вы его прочтете, имеет смысл еще раз проверить доки гугла относительно правил для сайтмапа.__
 +Кроме того, в правила гугла написано, что размер сайтмапа должен быть не более опредленного, поэтмоу если у вас больше 1-2-3к галер то вам в любом случае надо разделить на страницы по ?page=1 ?page=2 и тп. (см [[New Rotation Hints#setting_get_paramaters]]
 +
 +===== Как сделать RSS =====
 +
 +1. Создайте темплейт rss (начиная с апдейта 47 он есть в дефолтных темплейтах) с содержимым вроде
 +<code>
 +<thumb num=1-100> темпелйте для rss </thumb>
 +</code>
 +
 +и сабтемплейтом в соответствии с форматом rss.
 +
 +2. на корне домена создайте файл rss.php 
 +<code>
 +<?php
 +
 +define('CACHE_TIME', 86400);
 +$_GET['force_template'] = 'rss';
 +$_GET['skip_cell_settings'] = true; // skips cell K calculation - saves a bit of processor time
 +include('./scj/tube/index.php');
 +</code>
 +
 +
 +
 +===== Custom title for each template =====
 +
 +Например вы инклудите темплейт header во всех темпелйтах, поэтому если вы хотите разные титлы для разных страниц есть следующие варианты:
 +
 +Вариант в зависимости от темплейта
 +
 +<code>
 +
 +<?php 
 +if ('<!--TEMPLATE_NAME-->' == 'index' { ?> 
 +This is index
 +<? } elseif ('<!--TEMPLATE_NAME-->' == 'content_list') { ?>
 +This is category 
 +<? } elseif ('<!--TEMPLATE_NAME-->' == 'content_search') { ?>
 +this is search
 +<? } else { ?>
 +some other page
 +<? } ?>
 +
 +
 +</code>
 +
 +В зависимости от переданных в урле переменных
 +
 +<code>
 +<html>
 +<?php if ($_GET['gallery_id']) {?>
 +<title>This is custom gallery , display gallery description here for example <!--DESCRIPTION--></title>
 +<?php } elseif ($_GET['group_id']) { ?>
 +<title>This is category page, use here <!--GROUP_NAME--></title>
 +<?php } else { ?>
 +<title>This is index, any other desc here</title>
 +<?php } ?>
 +
 +</code>
 +
 +
 +
 +
 +
 +
 +===== Как сделать разделение по типу контента =====
 + 
 +Например, нам надо вывести на какой-то странице только мувики. Для этого в параметры надо добавить content_type=movie
 +
 +<code>
 +http://domain.com/scj/tube/?group_id=5 - весь контент из группы 5
 +http://domain.com/scj/tube/?group_id=5&content_type=movie - только мувики из группы 5
 +
 +Так же можно использовать image и flash
 +</code>
 +
 +Все это так же работает через файл
 +
 +<code>
 +<?php
 +$_GET['group_id'] = 5;
 +$_GET['content_type'] = 'movie';
 +include('./scj/tube/index.php');
 +</code>
 +
 +
 +===== Отдельный темплейт для опредленной категории =====
 +
 +Прежде чем делать отдельный темплейт - подумайте, возможно вам надо не отдельный темплейт, а просто воспользоваться custom vars для категорий и таким образом решить этот вопрос. Однако, если вы уверены, что надо совершенно другая страница то сделать это можно следующим образом:
 +
 +  - Rotation - CMS pages - создаем новый темплейт например cat_new.tpl
 +  - в common.php пишем следующее (после <? )
 +<code>
 +if ($_GET['group_id'] == '1' or $_GET['group_name'] == 'group_name') $_GET['force_template'] = 'cat_new';
 +где 1 и group_name это соотв ИД и имя нужной вам категории
 +</code>
 +
 +===== Блог на субдомене =====
 +
 +  - Создаем субдомен, копируем на корень common.php, index.php, а так же 2 каталога scj/cgi и scj/tube + создаем .htaccess как обычно
 +  - В базовой админке создаем темплейты, например blog_index, blog_content_list и тп
 +  - У нас получилось 3 комон, дабы не путаться делаем во всех 3х сделаем одинаково
 +<code>
 +После <? добавляем
 +
 +if ($_SERVER['REQUEST_URI'] == '/') {
 +$_GET['force_template'] = 'blog_index';
 +} elseif (isset($_GET['group_id'])) {
 +$_GET['force_template'] = 'blog_content_list';
 +}
 +</code>
 +
 +
 +===== Скимминг на кастом галерах =====
 +
 +В версии 46 добавлена новая опция - скимминг на галерах. 
 +
 +Rotation - CMS - Tube Settings можно поставить **custom gallery skimming** например в виде 
 +<code>
 +100%,70%trader.com,70%sponsor,50%sponsor_join,100
 +
 +первый клик на контент (100 и 100% одно и тоже, можно пистаь как удобнее)
 +второй: 70% контент остальные соотв. 30% - /scj/cgi/out.php?member=trader.com,
 +3й : 70% контенкт 30% спонсор ( на урл который прописан у спона в site url)
 +4й : 50% контента 50% спонсор ( урл - join url),
 +5 и далее - 100% контент
 +</code>
 +
 +Обратите внимание, что работает это только если вы линкуете не прямо на контента, а через скрипт, например 
 +
 +<code>
 +<a href='/gallery/<!--SAFE_DESC-->/<!--GALLERY_MD5-->/1.html'><img src='<!--IMG_1_THUMB-->'></a>
 +</code>
 +
 +
 +===== Нишевая продажа трафа =====
 +
 +Многие продают траф на биржах. При покупке биржа учитывает только домен и для мультмнишевых доменов цена трафа обычно ниже, чем для нишевых, однако есть возможность слать траф с указание ниши и в этом случае биржа может дать бОльший бид. 
 +
 +<code>
 +Например, обычно все продают траф по линке http://brocker.com/in.cgi?your_id 
 +В этом случае, если у вас мультиниш, ваш траф считается как мультиниш траф.
 +Но биржа предоставляет возможность слать траф как http://brocker.com/in.cgi?your_id&niche=test , где test это ниша. Такой траф уже считается как нишевый и может стоить больше.
 +</code>
 +
 +Для этого мы добавляем в урл продажи параметр {GROUP}те урл получается вида http://brocker.com/?id=your_id&niche={GROUP} (например для холдера http://www.trafficholder.com/in/in.php?вашид-{GROUP} ). Однако вопрос в том, что ниши japanese у брокера нет? наиболее близкая например tube_asian. Для этого в Rotation - CMS - Tube settings есть поле Niche traffic sell в котором нам и надо ввести соответствия наших ниш и ниш у брокера, например, 
 +
 +  tube_asian=Japanese,Asian 
 +  
 +  где tube_asian это ниша у брокера , а Japanese,Asian это наши ниши на сайте разделенные запятой.
 +
 +
 +
 +
 +===== PHP in navigation =====
 +
 +Как изветсно в темпелйтах можно использовать пхп. И конечно его можно использовать в навигации дабы вывести например какую то категорию другим цветом, или как то выделить, или не выводить категорию и тп
 +
 +<code>
 +
 +дефолтно это выглядит примерно так
 +<navigation>
 +<a href="/category/<!--CATEGORY_NAME-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a>
 +</navigation>
 +
 +допустим нам надо категорию girls выделить цветом
 +
 +<navigation>
 +<? if ('<!--CATEGORY_NAME-->' == 'girls') { ?>
 +<a href="/category/<!--CATEGORY_NAME-->/" title="<!--PAGE_NUM-->"><font color='pink'><!--PAGE_NUM--></font></a>
 +<? } else { ?>
 +<a href="/category/<!--CATEGORY_NAME-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a>
 +<? } ?>
 +</navigation>
 +
 +
 +допустим нам надо пропустить категорию girls в этом списке
 +
 +<navigation>
 +<? if ('<!--CATEGORY_NAME-->' != 'girls') { ?>
 +<a href="/category/<!--CATEGORY_NAME-->/" title="<!--PAGE_NUM-->"><font color='pink'><!--PAGE_NUM--></font></a>
 +<? }  ?>
 +</navigation>
 +
 +</code>
 +
 +===== Extra Thumb =====
 +
 +Для дизайна иногда удобно иметь 2 размера тумб ротации, например показывать на индексе большие тумбы, а на страницах категорий - помньше. 
 +
 +Для того что бы скрипт создавал большие картинки для индекса в Rotation - Settings - Crop Profile создаем кроппрофайл с бОльшими размерами, а при грабе в поле Extra Thumb указываем этот профайл. При этом скрипт создаст 2 тумбы: условно одна тумба /scj/thumbs/123/456.jpg и вторая из того же оригинала но с использоватением другого кроп-профайла - /scj/thumbs/123/456.jpg.extra.jpg
 +
 +Использовать это в темплейте можно так: обычно выводим тумбу как 
 +
 +  <img src='<!--THUMB_URL-->'> 
 +
 +Если вы делали экстра тумбу, то вывести ее можно как 
 +
 +  <img src='<!--EXTRA_THUMB_URL-->'>
 +
 +
 +
 +
 +===== Как сделать персональный темплейт трейдеру в новой ротации =====
 +  - Создайте темплейт в Rotation - CMS pages, например trd_tpl
 +  - Создайте файл например trd_tpl.php на корне домена следующего содержания
 +
 +<code>
 +<?php
 +$_GET['force_template'] = 'trd_tpl';
 +include('./scj/tube/index.php');
 +</code>
 +
 +и пропишите ПУТЬ (!НЕ УРЛ!!!) к этому файлу в редактировании трейдера.
 +
 +===== Как убрать параметр ротации из линков (1x23x456) =====
 +
 +Актуально только для скрипта версии 1.х
 +
 +В версии 2.х есть magic rotation parameter, когда в линках не надо ничего
 +
 +Обычно линки выглядят следующим образом:
 +
 +  /gallery/cool_gallery/index.html?12x34x56
 +
 +12x34x56 - это параметры ротации, цель - избавиться от этого в урле дабы выглядело это эстетичнее.
 +
 +Можно сделать следующим образом:
 +
 +1. В сабе ссылки у вас выглядят примертно так:
 +
 +<code>
 +<a href="/gallery/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->"> <img ...> </a>
 +
 +заменяем на 
 +
 +<a href="/gallery/<!--GALLERY_SLUG-->/index.html" rot_id='<!--THUMB_LINK-->'> <img ...> </a>
 +
 +</code>
 +
 +как ни сложно заметить мы вынести <!--THUMB_LINK--> в параметр rot_id
 +
 +
 +2. в <head> добавляем 
 +
 +<code>
 +<script type="text/javascript" src="/scj/includes/js/jquery.js"></script>
 +<script type="text/javascript">
 +$(document).ready(function(){
 + $('a[rot_id]').each(function(){
 + $(this).bind('click', function(){
 +     if ($(this).attr('href').indexOf('?') == -1) $(this).attr('href', $(this).attr('href')+ '?' + $(this).attr('rot_id'));
 + });
 + });
 +});
 +
 +</script>
 +</code>
 +
 +
 +===== Мне не нравится линк вида /gallery/cool/index.html?123x45x678 =====
 +
 +
 +Тут "не нравится" бывает 2х видов - сам вид /gallery и тп - это меняется в реврайте.
 +
 +2й вариант - не нравится, что 123x45x678 стоит сразу после урла, он там меняется и тп 
 +
 +Тут варианты:
 +
 +1. Если не нравится, что это видит серфер - http://smartcj.com/wiki/doku.php?id=ru:new_rotation_hints#%D0%BA%D0%B0%D0%BA_%D1%83%D0%B1%D1%80%D0%B0%D1%82%D1%8C_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80_%D1%80%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D0%B8_%D0%B8%D0%B7_%D0%BB%D0%B8%D0%BD%D0%BA%D0%BE%D0%B2_1x23x456
 +
 +2. Для СЕ  - http://smartcj.com/wiki/doku.php?id=ru:custom_galleries_and_google
 +
 +3. Для СЕ так же есть другой вариант - сделать линки вида 
 +
 +  /gallery/cool/index.html?link=images/123x45x678
 +
 +и в GWT объявить, что link - это незначащий парамтер и гугл может его игнорировать.
 +
 +Для этого в .htaccess заменяем места вида 
 +
 +  out.php?link=images/%{QUERY_STRING}
 +  на 
 +  out.php?%{QUERY_STRING}
 +  В темплейте там же меняем на 
 +  http://domain/gallery/<!--GALLERY_SLUG-->/index.html?link=images/<!--THUMB_LINK-->
 +
 +
 +
 +**Вариант 2 изменения окончания линков** 
 +
 +В реврайтах меняем 
 +
 +<code>
 +RewriteCond %{QUERY_STRING} ^(.+)$ 
 +RewriteRule ^gallery/([^/]+)/index.html$ /scj/cgi/out.php?link=images/%{QUERY_STRING}&url=content&slug=$1 [L]
 +</code>
 +
 +на 
 +
 +<code>
 +RewriteCond %{QUERY_STRING} ^param=(.+)$
 +RewriteRule ^gallery/([^/]+)/index.html$ /scj/cgi/out.php?link=images/%1&url=content&slug=$1 [L]
 +</code>
 +
 +как видно тут добавлен param который и можно отключить в GWT
 +
 +линки соответственно надо делать вида 
 +
 +  href="/gallery/<!--GALLERY_SLUG-->/index.html?param=<!--THUMB_LINK-->
 +
 +
 +
 +**Вариант 3 если вы хотите совершенно другой вид** 
 +
 +В данный момент таг <!--THUMB_LINK--> выдает условно 12x34x56, например вы хотите что б было &a=12&b=34&c=56 или например &ppp=12.34.56 и тп , одним словом какой-то другой вид.
 +
 +<code>
 +
 +в сабе делаете
 +
 +$my_var = explode('x', '<!--THUMB_LINK-->');
 +
 +получаете массив
 +
 +Array
 +(
 +[0] => 12
 +[1] => 34
 +[2] => 56
 +)
 +
 +</code>
 +
 +и можете из него формироваль линк как угодно
 +
 +например вариант с a b с
 +
 +<code>
 +
 +out.php?url=....&a=<?=$my_var[0]?>&b=<?=$my_var[1]?>&c=<?=$my_var[2]?>
 +
 +а в common.php складывается параметр назад
 +
 +if (isset($_GET['a'])) {
 +$_GET['link'] = 'images/' . $_GET['a'] . 'x' . $_GET['b'] . 'x' . $_GET['c'];
 +}
 +
 +</code>
 +
 +Таким образом можно сделать пармтеры с любыми именами или точками, одним словом фантазия никак не ограничена.
 +
 +
 +===== Как вывести в навигации все страницы =====
 +
 +Обычно навигация (она же пагинация) выглядит примерно так 1 2 3 ... 40 41 42.
 +
 +Если надо вывести все 42 без ... надо навигацию заменить примерно на следующее
 +
 +<code>
 +
 +Было 
 +
 +<navigation>
 +<li><a href="/category/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<!--PAGE_NUM-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a></li>
 +</navigation>
 +
 +
 +заменим на 
 +
 +<!--
 +закоментили текущую навигацию, не удаляя ее вообще из темплейта
 +<navigation>
 +<li><a href="/category/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<!--PAGE_NUM-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a></li>
 +</navigation>
 +-->
 +
 +<?php
 +$thumbs_per_page = 200;
 +$total_pages = ceil(<!--TOTAL_ITEMS-->/$thumbs_per_page);
 +
 +for ($i = 1; $i <= $total_pages; $i++ ) {
 +?> 
 +<li><a href="/category/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<?php echo $i?>/" title="<?php echo $i?>"><?php echo $i?></a></li>
 +<?php }?>
 +
 +
 +
 +где $thumbs_per_page = 200; соотв кол-во тумб на старницу в вашем темплейте.
 +</code>
 +
 +
 +===== Рейтинг =====
 +
 +Что бы добавить рейтинг кастом галер надо (на примере content_custom_pic)
 +
 +Добавляем стили что б звездочки были красивые
 +
 +<code>
 +<style>
 +div.rating-cancel,div.star-rating{float:left;width:17px;height:15px;text-indent:-999em;cursor:pointer;display:block;background:transparent;overflow:hidden}
 +div.rating-cancel,div.rating-cancel a{background:url(/scj/tube/delete.gif) no-repeat 0 -16px}
 +div.star-rating,div.star-rating a{background:url(/scj/tube/star.gif) no-repeat 0 0px}
 +div.rating-cancel a,div.star-rating a{display:block;width:16px;height:100%;background-position:0 0px;border:0}
 +div.star-rating-on a{background-position:0 -16px!important}
 +div.star-rating-hover a{background-position:0 -32px}
 +/* Read Only CSS */
 +div.star-rating-readonly a{cursor:default !important}
 +/* Partial Star CSS */
 +div.star-rating{background:transparent!important;overflow:hidden!important}
 +/* END jQuery.Rating Plugin CSS */
 +</style>
 +</code>
 +
 +
 +Добавляем JS скрипт который будет красиво делает mouseover для звездочек
 +
 +<code>
 +<script src='/scj/includes/js/jquery.js' type="text/javascript"></script>
 +<script src='/scj/includes/js/jquery.rating.pack.js' type="text/javascript" language="javascript"></script>
 +<script>
 +$(function(){
 + $('.auto-submit-star').rating({
 + callback: function(value, link){
 + $('#rating_div').html('Posting...');
 +
 + $.get('/scj/tube/index.php',
 + {
 + 'gallery_id': '<!--GALLERY_ID-->',
 + 'action': 'rating',
 + 'rating': value
 + },
 +  function(data) {
 +            $('#rating_div').html('Thank you!');
 +   }
 + );
 + }
 + });
 +});
 +</script>
 +</code>
 +
 +
 +
 +Добавляем конкретно сами звездочки 
 +
 +<code>
 +<h4>Rate this movie:</h4> <div id='rating_div'>    
 +    <input class="auto-submit-star" type="radio" name="rating" value="1"/ <? if(<!--RATING--> > 0) echo 'checked' ?> >
 +    <input class="auto-submit-star" type="radio" name="rating" value="2"/ <? if(<!--RATING--> > 1) echo 'checked' ?> >
 +    <input class="auto-submit-star" type="radio" name="rating" value="3"/ <? if(<!--RATING--> > 2) echo 'checked' ?> >
 +    <input class="auto-submit-star" type="radio" name="rating" value="4"/ <? if(<!--RATING--> > 3) echo 'checked' ?> >
 +    <input class="auto-submit-star" type="radio" name="rating" value="5"/ <? if(<!--RATING--> > 4) echo 'checked' ?> >
 +</div>
 +</code>
 +
 +
 +
 +Все.
 +
 +PS Вывести рейтинг можно где угодно тагом <!--RATING--> - это будет число из которого можно получить что угодно.
 +простейший пример в сабе
 +<code>
 +<? if(<!--RATING--> > 0) echo '*' ?> 
 +<? if(<!--RATING--> > 1) echo '*' ?> 
 +<? if(<!--RATING--> > 2) echo '*' ?> 
 +<? if(<!--RATING--> > 3) echo '*' ?> 
 +<? if(<!--RATING--> > 4) echo '*' ?> 
 +</code>
 +
 +
 +===== Рейтинг +1\-1 like\dislike =====
 +
 +И прочие 2хвариантные рейтинги.
 +Смысл очень простой: оставляем только 2 пункта из того же рейтинга пунктом выше. Это будут рейтинг 1 и 2. Условно если юзер поставил 1 это значит dislike , если 2 то like. Соответственно если по результатам у нас получилось среднее 1.5 - значит 50\50 ставили лийки. 1.75 - значит 75% like, 25 dislike. Надеюсь смысл ясен.
 +
 +Техническая реализация:
 +
 +Добавляем JS скрипт, который будет постить результат голосования
 +<code>
 +
 +<script src='/scj/includes/js/jquery.js' type="text/javascript"></script> ЭТО НАДО ТОЛЬКО 1 РАЗ, ЕСЛИ У ВАС ОНО УЖЕ ЕСТЬ В ТЕМПЛЕЙТЕ ТО 2Й РАЗ ВСТАВЛЯТЬ НЕ НАДО
 +
 +<script>
 +function post_rating(value) {
 +
 +$.get('/scj/tube/index.php',
 + {
 + 'gallery_id': '<!--GALLERY_ID-->',
 + 'action': 'rating',
 + 'rating': value
 + },
 + function(data) {
 +        $('#rating_div').html('Thank you!');
 + }
 +);
 +}
 +
 +</script>
 +</code>
 +
 +Добавляем сами кнопки голосования и вывод рейтинга
 +
 +<code>
 +
 +<div id='rating_div'>
 +current rating = <?=(<!--RATING--> == 0) ? 'not rated' : round( (<!--RATING--> - 1) * 100 ) . '%'?> <br>
 +rate it: 
 +
 +<span onclick='post_rating(2)' style="cursor: pointer"> +1 </span> ............................
 +<span onclick='post_rating(1)' style="cursor: pointer"> -1 </span>
 +
 +</div>
 +
 ++1 и -1 заменяются на пальчики, галочки и прочее что угодно
 +
 +</code>
 +
 +
 +Все.
 +
 +===== PHP code in template =====
 +
 +Как вы вероятно знаете, в темплейтах можно использовать пхп код. Рассмотреть все ньансы языка в одном примере конечно не получится, да и видимо не надо, однако хотелось бы показать небольшой пример. Например, нам надо вывести деск, таг <!--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>  
 +
 +
 +
 +===== Comments =====
 +
 +Комменты так же просто добавить
 +
 +Добавляем код, который будет постить коммент без перезагрузки старницы (AJAX)
 +
 +<code>
 +
 +<script src='/scj/includes/js/jquery.js' type="text/javascript"></script> ---- эта строка не обязательна если jquery уже где-то инклудится, например в рейтинге.
 +
 +
 +<script>
 +function post_comment() {
 +
 + $.post(
 + '/scj/tube/',
 + {
 + 'action': 'add_comment',
 + 'gallery_id': '<!--GALLERY_ID-->',
 + 'captcha': $('#captcha').val(),
 + 'username': $('#username').val(),
 + 'comment': $('#comment').val()
 + },
 + function(data) {
 + if (data != 'OK') {
 + $('#comment_error').text(data);
 + } else {
 +    $('#comment_error').text(' ');
 +        $('#add_comment').html('Thank you ! Your comment will be reviewed by admin.');
 +         }
 +
 + }
 + );
 +}
 +</script>
 +
 +</code>
 +
 +
 +Добавляем html форму комментов
 +
 +<code>
 +
 +<div id='comment_error'></div>
 +<div id='add_comment'>
 +<div class="clear"></div>
 +<h4>Add comment</h4>
 +
 +<FORM name="add_comment" method="POST">
 +
 +<div class="r_line">
 +<label>Name:</label> <input class="s_input" type="text" name='username' id='username' value="<?=$user['username']?>">
 +</div>
 +<div class="r_line">
 +<label>Comment:</label> <textarea class="s_text" class="ph2" name='comment' id='comment' rows=5 cols=35 value="Leave Your Comments Here"></textarea>
 +</div>
 +
 +<? if ($rot_settings['tube_comment_captcha']) {  ?>
 +<div class="r_line">
 +<label>Captcha:</label><div class="clear"></div><img src="/scj/tube/captcha.php" id="captcha_img" width="158" height="60" alt="Visual CAPTCHA" />
 +<input id='captcha' class="s_input" type="text" name='captcha' value="" />
 +</div>
 +<div class="r_line">
 +<input type='button' value='Post Comment' onClick='post_comment();'>
 +</div>
 +<? } ?>
 +</div>
 +
 +</form>
 +
 +</code>
 +
 +
 +и добавляем вывод уже имеющихся комментов
 +
 +<code>
 +
 +<!--TOTAL_COMMENTS-->
 +
 +<comments num=1-10>
 +<!--DATE--> <!--USERNAME--> : <!--COMMENT-->
 +</comments>
 +
 +</code>
 +
 +
 +Все.
 +
 +
 +===== Geo targeting =====
 +
 +Фактически это пример пхп кода в шаблонах
 +
 +<code>
 +<?
 +if ($_SERVER['GEOIP_COUNTRY_CODE'] == 'GB') {
 +?>
 +
 +код баннера 1
 +
 +<? } else { ?>
 +
 +код баннера 2
 +
 +<? } ?>
 +
 +</code>
 +
 +
 +===== Два индекса с разным типом контента =====
 +
 +Условно надо 2 страницы с мувисным и пикчевым контентом. Например, movies.php and images.php
 +
 +Варианта 2
 +
 +1. Делаем все на одном темпелейте 
 +
 +  * создаем 2 файла вида 
 +<code>
 +<?php
 +$_GET['content_type'] = 'image'; // для второго файла 'movie'
 +include('./scj/tube/index.php');
 +</code>
 +  * любую из этих страниц прописываем в CJ Pages - это и будет индекс сайта 
 +  * поскольку темпелйт тут не указан - будет использован index
 +  * если в дизайне вы как-то работаете по-разному с разными размерами мувисных и пикчевых тумб то для обработки используйте код вида 
 +<code>
 +<?php
 +if ($_GET['content_type'] == 'image') {
 +?>
 +текст 1
 +<?
 +} else 
 +?>
 +тесткт 2
 +<?
 +}
 +
 +обратите внимание что этот код можно использовать как в сабе так и в самом темплейте.
 +соотвественно ссылки для пагинации будут movies.php?page=2 и тп
 +
 +</code>
 +
 +
 +Вариант 2. Делаем 2 разных темпелйта например index_movies and index_images с нужным дизайном и навигацией а так же 2 файла вида
 +
 +<code>
 +<?php
 +$_GET['content_type'] = 'image'; // для второго файла 'movie'
 +$_GET['force_template'] = 'index_images'; // для второго файла 'index_movies'
 +include('./scj/tube/index.php');
 +</code>
 +
 +
 +===== Перевод меню сайта ( i18 ) =====
 +
 +Довольно просто сделать перевод меню сайта (те ссылок типа Most Popular, Order By date и прочее) на другие языки.
 +
 +Rotation - CMS Templates - Tpl Custom Var добавляем кастом переменные, например most_popular, эту перменную можно использовать в темплейтах как <!--CUSTOM_VAR_MOST_POPULAR--> , при этом можно задать отдельный перевод для каждого языка. 
 +
 +
 +===== Другой flash плеер =====
 +
 +ПО дефолту в скрипте бесплатный плеер Jwplayer, на данный момент это уже немного старый плеер, но он работает :) Если вы хотите любой другой плеер, то главное что вам надо понять что плеер и скрипт никак не связаны. Скрипт формирует html страницу где заменяет таги и все, как отображается страница зависит от браузера. Как играет мувик - зависит от плеера.
 +
 +По дефолту код примрено такой
 +
 +<code>
 +<object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="<!--FLV_WIDTH-->" height="<!--FLV_HEIGHT-->">
 + <param name="movie" value="/scj/tube/player/player.swf" />
 + <param name="allowfullscreen" value="true" />
 + <param name="allowscriptaccess" value="always" />
 + <param name="flashvars" value="file=<!--FLV_URL-->&image=<!--FLV_THUMB_URL-->" />
 + <embed
 + type="application/x-shockwave-flash"
 + id="player2"
 + name="player2"
 + src="/scj/tube/player/player.swf" 
 + width="<!--FLV_WIDTH-->" 
 + height="<!--FLV_HEIGHT-->"
 + allowscriptaccess="always" 
 + allowfullscreen="true"
 + flashvars="file=<!--FLV_URL-->&image=<!--FLV_THUMB_URL-->" 
 + />
 + </object>
 +
 +</code>
 +
 +как видно тут вызывается плеер /scj/tube/player/player.swf и ему передаются парамтеры flashvars="file=<!--FLV_URL-->&image=<!--FLV_THUMB_URL-->"
 +Вы можете положить свой плеер куда удобно, любой плеет, изменить темпелйт что б он загружал ваш плеер, просто проверьте как ему надо передавать параметры. Например плеер Kernel
 +
 +<code>
 +
 +<object id="kt_player" name="kt_player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="600" height="400">
 +    <param name="allowscriptaccess" value="always"/>
 +    <param name="allowFullScreen" value="true"/>
 +    <param name="movie" value="http://%YOUR_DOMAIN_HERE%/player/kt_player.swf"/>
 +    <param name="flashvars" value="video_url=<!--FLV_URL-->&amp;preview_url=<!--FLV_THUMB_URL-->"/>
 +    <embed src="http://%YOUR_DOMAIN_HERE%/player/kt_player.swf?video_url=<!--FLV_URL-->&amp;preview_url=<!--FLV_THUMB_URL-->" width="600" height="400" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"/>
 +</object> 
 +
 +</code>
 +
 +
 +===== Как быстро сделать блог на имеющейся базе =====
 +
 +Если вы хорошо наполняли базу изначально и у вас хорошие описания и очень желательно кастом галеры, то можно за 10 минут создать паралельно блог для сайта.
 +
 +  * создаем субдомен условно blog.yourdomain.com
 +  * ставим на этом субдомен smartcj
 +  * делаем его слейвом yourdomain.com
 +  * скачиваем [[http://smartcj.com/wiki/local_upload/SCJ_templates.example.49.sql|темплейты блога ]]
 +  * заливаем этот файл в Rotation - CMS (внизу Upload Templates )
 +
 +Все, блог готов :)
 +
 +
 +===== Suggestions Based on logged searches =====
 +
 +Автоподсказки  когда пользователь начинает вводить поиск на основании того что искали ранее
 +
 +
 +<code>
 +
 +<script type="text/javascript" src="/scj/includes/js/jquery.js"></script> Это может быть уже и есть в странице.
 +<script type="text/javascript" src="/scj/includes/js/jquery.autocomplete.min.js"></script> Этот скрипт как раз и делает автодополнение
 +
 +
 +<script>
 + $(document).ready(function(){   
 +        $('#search_field').autocomplete({
 +         serviceUrl: '/scj/tube/index.php?force_template=search_suggest&zero_items_to_404=off', /* Этот темпелйт будет ниже*/
 +
 +            onSelect: function(suggestion, data) {
 +        $('#search_field').val(suggestion.value);
 +        }
 +        });
 + });
 +</script>
 +
 +</code>
 +  
 +
 +немного стилей для красоты
 +  
 +<code>
 +<style>
 +.autocomplete-suggestions { border: 1px solid #999; background: #FFF; cursor: default; overflow: auto; }
 +.autocomplete-suggestion { padding: 2px 5px; white-space: nowrap; overflow: hidden; }
 +.autocomplete-selected { background: #F0F0F0; }
 +.autocomplete-suggestions strong { font-weight: normal; color: #3399FF; }
 +</style>
 +</code>
 +
 +
 +само поле поиска
 +
 +<code>
 +<input class=inputbox value='' type="text" size="30" id="search_field"> <br>
 +</code>
 +
 +Сам темпелйт 'search_suggest'
 +
 +<code>
 +<?php
 +header('Content-Type: application/json');
 +?>{
 +"query":"<!--ESCAPED_GET_QUERY-->",
 +"suggestions":[
 +{"value":"","data":""}
 +
 +<search_log num=1-10 skip_search_log=true search=GET_query>
 +,{"value":"<!--ESCAPED_SEARCH_QUERY-->","data":"<!--ESCAPED_SEARCH_QUERY-->"}
 +</search_log>
 +
 +]}
 +</code>
 +
 +Как проверить: /scj/tube/index.php?force_template=search_suggest&zero_items_to_404=off&query=... должно выдавать результат с теми поисками которые уже есть в базе
 +
 +
 +===== Suggestions : Based on regular search =====
 +
 +Тоже самое что выше, но подсказывает не по базе поисков, а по базе галер
 +
 +
 +styles
 +
 +<code>
 +<style>
 +.autocomplete-suggestions { border: 1px solid #999; background: #FFF; cursor: default; overflow: auto; }
 +.autocomplete-suggestion { padding: 2px 5px; white-space: nowrap; overflow: hidden; }
 +.autocomplete-selected { background: #F0F0F0; }
 +.autocomplete-suggestions strong { font-weight: normal; color: #3399FF; }
 +</style>
 +</code>
 +
 +
 +a field
 +
 +<code>
 +<input class=inputbox value='' type="text" size="30" id="search_field"> <br>
 +</code>
 +
 +
 +JS code 
 +
 +<code>
 +<script type="text/javascript" src="/scj/includes/js/jquery.js"></script>
 +<script type="text/javascript" src="/scj/includes/js/jquery.autocomplete.min.js"></script>
 +<script>
 + $(document).ready(function(){   
 +
 +        $('#search_field').autocomplete({
 +         serviceUrl: '/scj/tube/index.php?force_template=gallery_search_suggest',
 +
 +        onSelect: function(suggestion, data) {
 +                location.href = suggestion.data;
 +        }
 +        });
 +
 +
 + });
 +
 +</script>
 +</code>
 +
 +
 +темплейт  'gallery_search_suggest'
 +
 +
 +<code>
 +<?php
 +header('Content-Type: application/xml');
 +?>{
 +"query":"<!--ESCAPED_GET_QUERY-->",
 +"suggestions":[
 +{"value":"","data":""}
 +
 +<thumb skip_search_log=true search=GET_query num=1-10>
 +,{"value":"<!--ALT-->","data":"/gallery/<!--GALLERY_SLUG-->/index.html"}
 +</thumb>
 +
 +]}
 +</code>
 +
 +
 +Как видно разница только в том, что в самом темплейте ,а конкретно в таге <thumb
 +
 +===== Site with main niches =====
 +
 +Допустим, мы хотим создать сайт с 3 основными категориями (general (id 1) , gay (2) and shemale(3)) , у каждой из этих категорий есть подниши (условно тин, матуре и тп). Они должны быть именно подкатегориям (в редактировании категории есть поле parent category)
 +
 +  /?category_id=1  - выведет только то что находится в категории 1 И(!) подгруппах
 +  
 +Например, если он ищет по тагу и и надо из категории 1 то 
 +
 +  /?tag=...&category_id=1
 +  
 +  
 +
 +**Category thumbs**
 +
 +Можно создать 3 сета тумб категорий как раз под эту ситуацию
 +
 +Settings - System Thumbs 
 +
 +При выводе тумб категорий мы можем указать номер сета 
 +
 +  <category num=1-10 set_id=2 
 +  
 +Обратите внмание что сет так же можно передавать в урле
 +
 +  <category num=1-10 set_id=GET_set_id 
 + 
 +
 +
 +===== Custom flv: content separation =====
 +
 +Представим что у нас есть галерея с 3 флеш мувиками как например эта http://babesfarm.com/caprice/movies/kitchen_fuck05/index01.html
 +
 +Если из нее сделать кастом галерею, но если сделать просто так то получится галерея с 3мя мувиками (в темплейте галереи спонсор грамотно сделал прямые линки на мувики для скриптом которые не умеют грабить флеш контент), 3 флешмувиками и все это будет на одной странице. А мы хотим что бы каждый из мувиков открывался на отдельной странице, как в пиксовым контентом.
 +
 +**Как это сделать:**
 +
 +1. Создадим новый темплейт для флеш галер, где на странице галеры будут толкьо тумбы этой галеры (как у пиксовой), в сами мувики будут проигрываться на отдельной странице (опять же как у пиксовых галер), допустим он у нас будет называться **content_flv_gallery** и темпелйт его будет
 +
 +<code>
 +<a href='/scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=1'><img src='<!--FLASH_1_THUMB-->'></a>
 +<br>
 +<a href='/scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=2'><img src='<!--FLASH_2_THUMB-->'></a>
 +<br>
 +<a href='/scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=3'><img src='<!--FLASH_3_THUMB-->'></a>
 +<br>
 +</code>
 +
 +как тут не сложно заметить тут нет флешплеера и все тумбы указывают на /scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=...
 +
 +где есть еще один темплейт **content_flv_single_item** где и будет флешплеер, а так же item_id - где передается номер мувика из галеры который и надо проиграть.
 +
 +**Содержимое content_flv_single_item**
 +
 +<code>
 +<? if ($_GET['item_id'] == 1)  { ?> 
 +<div class="flash">
 + <div class="player">
 +
 +<object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="<!--FLASH_1_THUMB_X-->" height="<!--FLASH_1_THUMB_Y-->">
 + <param name="movie" value="/scj/tube/player/player.swf" />
 + <param name="allowfullscreen" value="true" />
 + <param name="allowscriptaccess" value="always" />
 + <param name="flashvars" value="file=<!--FLASH_1_IMAGE-->&image=<!--FLASH_1_THUMB-->" />
 + <embed
 + type="application/x-shockwave-flash"
 + id="player2"
 + name="player2"
 + src="/scj/tube/player/player.swf" 
 + width="<!--FLASH_1_THUMB_X-->" 
 + height="<!--FLASH_1_THUMB_Y-->"
 + allowscriptaccess="always" 
 + allowfullscreen="true"
 + flashvars="file=<!--FLASH_1_IMAGE-->&image=<!--FLASH_1_THUMB-->" 
 + />
 + </object>
 +
 +</div>
 +
 +<? } ?>
 +
 +
 +
 +
 +<? if ($_GET['item_id'] == 2)  { ?> 
 +<div class="flash">
 + <div class="player">
 +
 +<object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="<!--FLASH_2_THUMB_X-->" height="<!--FLASH_2_THUMB_Y-->">
 + <param name="movie" value="/scj/tube/player/player.swf" />
 + <param name="allowfullscreen" value="true" />
 + <param name="allowscriptaccess" value="always" />
 + <param name="flashvars" value="file=<!--FLASH_2_IMAGE-->&image=<!--FLASH_2_THUMB-->" />
 + <embed
 + type="application/x-shockwave-flash"
 + id="player2"
 + name="player2"
 + src="/scj/tube/player/player.swf" 
 + width="<!--FLASH_2_THUMB_X-->" 
 + height="<!--FLASH_2_THUMB_Y-->"
 + allowscriptaccess="always" 
 + allowfullscreen="true"
 + flashvars="file=<!--FLASH_2_IMAGE-->&image=<!--FLASH_2_THUMB-->" 
 + />
 + </object>
 +
 +</div>
 +
 +<? } ?>
 +
 +
 +
 +<? if ($_GET['item_id'] == 3)  { ?> 
 +<div class="flash">
 + <div class="player">
 +
 +<object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="<!--FLASH_3_THUMB_X-->" height="<!--FLASH_3_THUMB_Y-->">
 + <param name="movie" value="/scj/tube/player/player.swf" />
 + <param name="allowfullscreen" value="true" />
 + <param name="allowscriptaccess" value="always" />
 + <param name="flashvars" value="file=<!--FLASH_3_IMAGE-->&image=<!--FLASH_3_THUMB-->" />
 + <embed
 + type="application/x-shockwave-flash"
 + id="player2"
 + name="player2"
 + src="/scj/tube/player/player.swf" 
 + width="<!--FLASH_3_THUMB_X-->" 
 + height="<!--FLASH_3_THUMB_Y-->"
 + allowscriptaccess="always" 
 + allowfullscreen="true"
 + flashvars="file=<!--FLASH_3_IMAGE-->&image=<!--FLASH_3_THUMB-->" 
 + />
 + </object>
 +
 +</div>
 +
 +<? } ?>
 +
 +</code>
 +
 +тут 3 практически одинаковых куска которые отличаются только <? if ($_GET['item_id'] == 1)  { ? и соответственно номером подставляемого тага <!--FLASH_1_THUMB-->
 +
 +
 +
 +
 +**2. Граб галереи**
 +
 +При грабе конетента либо позже через редактирование надо выставить **Embed Template** для этой галеры соответственно - content_flv_gallery
 +
 +
 +**3. Реврайт** 
 +
 +Урлы вида /scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=1 смотрятся не особенно красиво, поэтому можно добавить реврайт например 
 +
 +<code>
 +RewriteRule ^flash_gallery/([^/]+)/([0-9]{1,2}).html$ /scj/tube/?slug=$1&force_template=content_flv_single_item&item_id=$2&%{QUERY_STRING} [L]
 +</code>
 +
 +и соответственно заменить в темплейте content_flv_gallery
 +
 +<code>
 +линки вида 
 +<a href='/scj/tube/?slug=<!--GALLERY_SLUG-->&force_template=content_flv_single_item&item_id=1'><img src='<!--FLASH_1_THUMB-->'></a>
 +на 
 +<a href='/flash_gallery/<!--GALLERY_SLUG-->/1.html'><img src='<!--FLASH_1_THUMB-->'></a>
 +</code>
 +
 +
 +**4. Особенности этой галеры**
 +
 +У нее спонсор разместил 2 вида линков на контент: они флеш, другие в виде ссылок на мувики для скриптов , которыt не умеют грабить флешконтент. Это правильно, но скрипт скачает и тот и другой вариант, хотя выводить мы хотим только флеш. Для нас это плохо только тем, что будет храниться надиске часть контента, который нам не нужен. Соттветственно при доавлении контента можно в импорте выставить Add only this type of content - flash. Это сэкономит немного места на диске.
 +
 +===== Навигация в пределах одной галереи =====
 +
 +Например у нас есть кастомная пиксовая галерах с некоторым кол-вом картинок. По нажатию на тумбу открывается не сама картинка, а страницу с этой картинкой плюс какая-то допреклама и тп. Можно на этой же странице проставить линки на сл картинки этой галеры, например 
 +
 +<code>
 +
 +<? if ($_GET['item_id'] != 1) { ?>
 +<a href='/gallery/<!--GALLERY_SLUG-->/<?=($_GET['item_id']-1)?>.html'> Prev </a>
 +<? } ?>
 +
 +<? if ($_GET['item_id'] < <!--GALLERY_TOTAL_ITEMS--> ) { ?>
 +<a href='/gallery/<!--GALLERY_SLUG-->/<?=($_GET['item_id']+1)?>.html'> Next </a>
 +<? } ?>
 +
 +</code>
 +
 +Если у вас другие реврайты не забывайте править линки.
 +
 +
 +===== Friendly tube =====
 +
 +Для контент сайтов на одной базе (мастер слейв)  есть вариант организации трейдера между собой, когда серфер видит контент но уже на другом сайте сети. 
 +
 +Например, юзер кликает на http://domain1.com/gallery/gallery_slug/index.html, но скрипт по скиму решает послать его на трейд. В этом случае юзер не видит галеру. Если мы его отправляем на другой сайт нашей сети мы можем показать ему галеру, но уже на другом домене. 
 +
 +Это положительно сказывается на проде исходного сайта (человек хотел увидеть мувик - он его увидел), а так же дает возможность вокруг самого эмбеда показать другие тумбы = серфер может кликнуть на эти тумбы на сайте трейдера.
 +
 +Для этого на сайте domain1.com для трейдера domain2.com указываем тип сайта - Friendly Tube. В этом случае, если скрипт решает послать на этого трейдера, то скрипт будет пересылать трейдеру slug галеры. Конечно только  в том случае, если редирект на трейдера произошел при клике на контент, а не в топлисте. Те скрипт пошлет на просто на http://domain2.com/ , а добавит к урлу  http://domain2.com/?try&slug=super_gallery.  
 +
 +На domain2.com, если конечно там так же стоит SmartCJ, скрипт видит этот слаг и открывает не индекс сайта, а редиректит на урл Try Param Redirect URL, который выглядит примерно как 
 +
 +  http://{DOMAIN}/gallery/{GET_slug}/index.html 
 +
 +те редиректит на галеру. Если у вас свои реврайты, то надо поменять урл под ваши реврайты.
 +
 +Это конечно актуально только при 
 +  - если у трейдера так же SmartCJ 
 +  - если вы используете либо мастар-слейв (тогда ИД 100% одинаковые) либо если контент в целом пересекается.
 +
 +Если на сайте трейдера не будет галеры с данным ИД - получится просто индекс
 +
 +
 +
 +===== Custom links =====
 +
 +Линки на галереи в дефолтном варианте /gallery/gallary_slug/index.html для того что бы их поменять надо поменять реврайт + темпелйты , что бы формировались урлы под ваши реврайты.
 +
 +Аналогично для категорий, тагов и тп.
 +
 +Единственный нюанс есть с линками категорий: /category/cool/date/1/ - category слово тут меняется через реврайты как и все остальное. cool - название категории, а вот date - это уже сортировка, а скрипт должен увидеть сортировку по понятному ему признаку. Те если туда написать new_galleries_first например то он не поймет что именно надо.
 +
 +Что бы поменять на такой вариант надо:
 +
 +Добавить в common.php (note: все они должны быть одинаковые)
 +<code>
 +if (isset($_GET['order']) and $_GET['order'] == 'new_galleries_first') {
 +$_GET['order'] = 'date';
 +} elseif (isset($_GET['order']) and $_GET['order'] == 'long_galleries_first') {
 +$_GET['order'] = 'duration';
 +} else {
 +$_GET['order'] = 'ctr';
 +}
 +</code>
 +
 +Теперь вариант /category/cool/new_galleries_first/1/ будет срабатывать как надо.
 +
 +Однако в самой навигации стоит SORT_ORDER, который фактически равно  $_GET['order'], а нам надо наш вариант. Поэтому добавляем так же свою переменную в common.php 
 +
 +<code>
 +if (isset($_GET['order']) and $_GET['order'] == 'new_galleries_first') {
 +$_GET['order'] = 'date';
 +$GLOBALS['original_sort_name'] = 'new_galleries_first';
 +} elseif (isset($_GET['order']) and $_GET['order'] == 'long_galleries_first') {
 +$_GET['order'] = 'duration';
 +$GLOBALS['original_sort_name'] = 'long_galleries_first';
 +} else {
 +$_GET['order'] = 'ctr';
 +$GLOBALS['original_sort_name'] = 'best_galleries_first';
 +}
 +</code>
 +
 +А в темплейте вместо SORT_ORDER - используем <?=$GLOBALS['original_sort_name']?> 
 +
 +PS В таге навигации надо добавить skip_href_deletion=true что бы оно не чистило ваш пхп код.
 +
 +
 +===== Random keywords for galleries =====
 +
 +Если у вас есть список кейвордов которые вы хотели вы рендомно раскидать по галерам (например создать кастом вар и потом использовать его где-то в галере) то это может сделать так:
 +
 +  * создайте текстовый файл с кейвордами (условно keywords.txt)
 +  * пхп скрипт kw.php
 +
 +<code>
 +<?php 
 +$lines = file('/FULL/PATH/TO/keywords.txt');
 +echo $lines[rand(0, count($lines) -1)];
 +</code>
 +
 +  * убедитесь что в браузере http://domain/kw.php выдает рендомную строку
 +  * добавляем import replacement вида 
 +
 +<code>
 +If this field = URL
 +Contains this value = http
 +Then Search For = *
 +in This Field = Custom field 1
 +And Replace it With = external:http://domain/kw.php
 +</code>
 +
 +Все.
 +
 +Основное тут external:http://domain/kw.php, те кастом вар будет получать значение которое выдаст external:http://domain/kw.php.
 +
 +
 +===== Site with main niches =====
 +
 +Допустим нам надо создать сайт 3 основными нишами и Х дополнительных.
 +
 +Основные нишы: general (id 1) , гай (2) и шмель (3)
 +и например 100 ниш вида teen (id 4), amateur (id 5) и так далее
 +
 +Логично, что если человек хочет видеть general, но остальные 2 и 3 онс корее всего видеть не хочет. Те по категориям 1 2 и 3 должна быть глобальная фильтрация.
 +
 +Таким образом все галеры на сайте у нас оказываются как минимум в 2х категориях: одной из 1 2 3 и как минимум в одной из остальных (в нашем примере 4 и 5).
 +
 +При выводе галер мы можем ограничить то, что хочет видеть серфер. Например, он хочет ввидеть тин (4) и только general (те надо исключить группы 2 и 3) - ссылка получается
 +
 +  /?group_id=4&skip_group_id=2,3
 +  
 +Если надо видеть тин, но который в группе гай (это значит надо исключить 1 и 3) то ссылка будет 
 +
 +  /?group_id=4&skip_group_id=1,3
 +
 +По такой же схеме можно разделить например таги 
 +
 +  /?tag=...&skip_group_id=1,3
 +
 +
 +**Тумбы категорий:**
 +
 +Settings - System Thumbs можно настроить нужное кол-во тумб категорий. 
 +В данном случае нам надо 3 набора (сета) тумб категорий - для каждой из групп 1 2 и 3.
 +Для того, что бы фильтровать тумбы категории есть поле Skip group ids, comma separated 
 +
 +Например, для категории 1, в которой мы не хотим видеть тумбы из категорий гай и шмель мы должны записать 2,3. Сет 2 у нас будет гай, те мы исключим группы дженерал (1) и шмель (3), те запишем туда 1,3.
 +
 +При выводе тумб категорий мы можем указать какой сет выводить, например выведем сет 2
 +
 +  <category num=1-10 set_id=2 
 +  
 +Для удобства номер сета можно брать из урла /?set_id=2
 +
 +  <category num=1-10 set_id=GET_set_id 
 +  
 +Тк мы не хотим выводить саму текущую группу то тут пригодится параметр skip_group_id (те выводя сет 2 нам саму группу гай (2) выводить не надо) /?set_id=2&skip_group_id=2
 +
 +  <category num=1-10 set_id=GET_set_id skip_group_id=GET_skip_group_id
 +  
 +Как можно видеть в данном примере у нас ИД категории и сета совпадают, поэтому таг можно сделать даже 
 +
 +  <category num=1-10 set_id=GET_set_id skip_group_id=GET_set_id
 +  
 +но что бы не было путаницы в примере такой замены мы делать не будем.
 +
 +Кроме того, в каких-то категории могут быть специфическими для какой-то ниши и поэтому там может не оказаться галер, поэтому имеет смысл добавить min_gallery_count=1 что бы не выводить пустые категории
 +
 +<category num=1-10 set_id=GET_set_id skip_group_id=GET_set_id min_gallery_count=1
 +
 +  
 +  
 +===== Content protection =====  
 +
 +По дефолту контент лежит в scj/thumbs/galleries/.../1.jpg и условно мувик к нему scj/thumbs/galleries/.../1.flv
 +
 +На странице мы выводим <img src='/scj/thumbs/galleries/.../1.jpg'>, и в проигрывателе мувиков что-то вроде file: /scj/thumbs/galleries/.../1.flv
 +
 +И серфер видит прямой линк на /scj/thumbs/galleries/.../1.flv и может скачать мувик. Например, мы решили сделать жизнь пользователя немного тяжелее и не дать ему скачать по прямой линке. Как это сделать (из расчета что у нас nginx):
 +
 +1. сначала в конфиге nginx запретим скачивать файлы напрямую 
 +
 +<code>
 +location ~* /scj/thumbs/galleries/.*\.(flv)$ {
 +   deny all;
 +}
 +</code>
 +
 +и добавляем туда же секретную локацию
 +
 +  location /protected {
 +            root /var/www;
 +            internal;
 +  }
 +
 +
 +2. немного подправим темплейт. Например сейчас он выглядит примерно так 
 +
 +  <a href='<!--IMG_1_IMAGE-->'><img src='<!--IMG_1_THUMB-->'></a>
 +
 +
 +что нам дает примерно такой результат 
 +
 +  <a href='/scj/thumbs/galleries/482/850/1_201.flv'><img src='/scj/thumbs/galleries/482/850/1_t.jpg'></a>
 +
 +мы добавим /content.php?check=<?=time()?>&url=
 +
 +  <a href='/content.php?check=<?=time()?>url=<!--IMG_1_IMAGE-->'><img src='<!--IMG_1_THUMB-->'></a>
 +
 +и в результате получится 
 +
 +  <a href='/content.php?check=1511450638&url=/scj/thumbs/galleries/482/850/0_771.flv'><img src='/scj/thumbs/galleries/482/850/0_t.jpg'></a>
 +  
 +
 +3. создаем content.php 
 +  
 +<code>
 +<?php
 +if (!$_GET['check'] or $_GET['check'] < time() - 86400) {
 + die("Error link");
 +}
 +
 +header("X-Accel-Redirect: /protected/" . $_GET["url"]);  
 +
 +</code>
 +
 +
 +Итого если вы настроили верно nginx то при прямом запросе /scj/thumbs/galleries/482/850/0_771.flv должно выдавать 403. 
 +
 +По линке /content.php?check=1511450638&url=/scj/thumbs/galleries/482/850/0_771.flv должно отдавать файл, тут 1511450638 - это просто unix time. Его можно заменить на что угодно.
 +
 +===== Content when No Content found =====  
 +
 +Например, человек искал какой-то кейворд которого у вас на сайте нет, ему выдало 0 результатов поиска. Но вы хотели бы показать хоть что-то. 
 +
 +Есть 3 варианта:
 +
 +
 +**Первый** 
 +
 +По умолчанию если ничего не найдено - показывает темпелйт content_not_found , те если там вывести 
 +
 +  <thumb num=1-10 order=easy_random > 
 +
 +то это и будут ваши рендомные галеры
 +
 +
 +**Вариант 2**
 +
 +если не хочется менять content_not_found то делаем отдельный темплейт random_content
 +
 +<code>
 +Nothing found , look at those links
 +
 +<thumb num=1-10 order=easy_random zero_items_to_404=off> .... 
 +
 +
 +</code>
 +
 +
 +а сам темплейт (content_search) поиска поменять как 
 +
 +<code>
 +
 +
 +<?if (<!--TOTAL_ITEMS--> == 0) { ?>
 +
 +<script>
 +window.location.replace("https://yourdomain/?force_template=random_content"); (тут конечно реврайт какой добавляем)
 +</script>
 +
 +<? } else { ?>
 +
 +выводим тумбы как обычно в поиске 
 +
 +<? } ?>
 +
 +
 +</code>
 +
 +
 +в этом сулчае ничего лишнего не добавляется.
 +
 +
 +**Вариант 3**
 +
 +Просто меняем content_search как 
 +
 +<code>
 +
 +<?if (<!--TOTAL_ITEMS--> == 0) { ?>
 +
 +Nothing found , look at those links
 +
 +<thumb num=1-10 order=easy_random search="" zero_items_to_404=off> .... 
 +
 +
 +<? } else { ?>
 +
 +<thumb num=1-10 zero_items_to_404=off page_main_tag=true> .... 
 +выводим тумбы как обычно в поиске 
 +
 +<? } ?>
 +
 +</code>
 +
 +Этот вариант проще но минус в том, что даже если что-то найдено то <thumb num=1-10 order=easy_random> таг будет обработан ( пхп отразабывает после макросов скрипта) а это значит немного больше нагрузки.
 +
 +
 +
 +===== Lasted Visited Galleries =====  
 +
 +Это пример использования кеша в темпелйтах и макросах
 +
 +Добавляем в темплейт галерей (например content_page) следующий кусок кода 
 +
 +<code>
 +Current gallery id: <!--GALLERY_ID--> <br><br><br>
 +
 +<?
 + if ((int) '<!--GALLERY_ID-->') {
 + $last_items = Cache::get('last_items');
 +
 + if (!$last_items) $last_items = array();
 +
 + if ($last_items[0] != (int) '<!--GALLERY_ID-->') array_unshift($last_items, (int) '<!--GALLERY_ID-->');
 + $last_items = array_slice($last_items, 0, 100, true);
 +
 + Cache::set('last_items', $last_items, 3600);
 + }
 +
 +?>
 +
 +
 +<thumb num=1-10 limit_by_gallery_id=true order=row gallery_id=CACHE_last_items cache_time=10> 
 + Last visited: <!--GALLERY_ID--><br>
 +</thumb>
 +
 +</code>
 +
 +
 +Тут надо отметить для себя
 +
 +  - Cache::set('last_items', $last_items - добавляем в кеш просомтренные ИД
 +  - в таге выводим подхватывая из кеша <thumb num=1-10 limit_by_gallery_id=true **gallery_id=CACHE_last_items** order=row >  
 +  - в список последних просмотренных добавляется только если есть if ('<!--GALLERY_ID-->') {
 +  - но сам список можно выводить и на индекс
 +
 +
 +Тут надо понимать что 
 +
 +  - если вы откроете страницу без кеше - то список последних прочтен не будет (нет кеша)
 +  - страница кешируется вместе с этим списком,  те если вы смотрели галеру ид 1 2 и 3, то на 3 в последних просмотренных будет 1 и 2, а вот для 2, даже если ее открыть снова после 3, будет только 1 тк галера 2 закешена.
 +
 +
 +Тут есть 2 варианта: 
 +
 +  - оставить как есть тк для серфера это не так важно
 +  - уменьшить время кеша (cache_time=100)
 +
 +
 +===== Lasted Visited Galleries By Country =====  
 +
 +Тут надо немного более глубокое понимание процесса.
 +
 +У вас есть страница сайта, что бы не генерить ее для каждого серфера - она генерится и сохраняется в кеше на какое-то время, таким образом для следующих посетителей не надо генерить страницу по новой. Если мы хотим показать как в примере выше, но по странам - нам надо как минимум для каждой страны переделать страницу, учитывая что в мире 190 стран - значит надо будет генерить в 190 раз больше страниц (под каждую страну отдельно)
 +
 +
 +Что бы избежать этого можно пойти другим путем
 +
 +  - например на индексе делаем код колторый запрашиват условно страницу last_viewed.php и отображает содержимое 
 +  - получается что index будет одинаковый для всех и только last_viewed.php надо будет отработать 190 (по количеству стран)
 +
 +
 +Пошагово как сделать 
 +
 +1.  в темплейт галеры добавляем
 +
 +<code>
 +id: <!--GALLERY_ID-->
 +
 +
 +<?
 + if ((int) '<!--GALLERY_ID-->') {
 +
 +     $cache_id = 'last_items_' . $_SERVER['GEOIP_COUNTRY_CODE'];
 +
 + $last_items = Cache::get($cache_id);
 +
 + $last_items[(int) '<!--GALLERY_ID-->'] = (int) '<!--GALLERY_ID-->';
 + $last_items = array_slice($last_items, 0, 100);
 +
 + Cache::set($cache_id, $last_items, 86400);
 +
 + }
 +
 +
 +?>
 +
 +</code>
 +
 +тут в кеш  перменную 
 +
 +  $cache_id = 'last_items_' . $_SERVER['GEOIP_COUNTRY_CODE'];
 +
 +добавляется список галер (последние 100). Как видно перменная зависит от страны.
 +
 +
 +
 +2. создаем новый темпелйт viewed_in_country
 +
 +<code>
 +<thumb num=1-10 limit_by_gallery_id=true gallery_id=CACHE_GET_last_viewed_cache_id order=row >
 + <!--GALLERY_ID--> ......<br>
 +</thumb>
 +
 +</code>
 +
 +тут надо обратить внимание на gallery_id=CACHE_GET_last_viewed_cache_id те список gallery_id берем из CACHE, переменная которая будет передана в GET  с именем  last_viewed_cache_id
 +
 +
 +
 +3. там где надо вывести список галер по текущей стране
 +
 +<code>
 +
 +<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
 +
 +last viewed in <?=$_SERVER['GEOIP_COUNTRY_CODE']?>
 +
 +<script language="JavaScript" type="text/JavaScript">
 +
 +$(document).ready(function(){
 +
 + $.get('./?force_template=viewed_in_country&last_viewed_cache_id=last_items_<?=$_SERVER['GEOIP_COUNTRY_CODE']?>' , {},
 +  function(data) {
 +            $('#last_viewed').html(data);
 +  }
 + );
 +
 +});
 +
 +</script>
 +
 +<div id='last_viewed'></div>
 +
 +</code>
 +
 +
 +тут основное это то что мы запрашиваем урл 
 +
 +./?force_template=viewed_in_country&last_viewed_cache_id=last_items_<?=$_SERVER['GEOIP_COUNTRY_CODE']?>
 +
 +где в перменной last_viewed_cache_id передаем из какого cache id надо брать список галер, а эта перменная будет своя для каждой страны.
 +
 +полученное содержимое вставляем в div = last_viewed
 +
 +Итого для теста надо 
 +
 +  * зайти на пару галер что б сработал пункт 1
 +  * открыть в браузере ./?force_template=viewed_in_country&last_viewed_cache_id=last_items_US , тут US это код вашей страны - должно отобразить список ИД галер где вы были в предыдущем пункте
 +
 +
 +
 +===== Master Slave First thumb =====  
 +
 +У мастера и слейвов набор галерей совпадает тк это одна база. Значит мы может устроить трейд между сайтами на одной базе таким образом, что бы при переходе к трейдеру первая тумба совпадала с той по которой кликнули. Это должно поднять проду.
 +
 +Как сделать: простой вариант что бы было понятно
 +
 +1. на сайте А серфер кликнул на галеру 12345, при переходе на трейдера (сайь Б) нам надо сайту Б дать знать какую галеру показать первой (ид 12345).  для этого в параметрах аута должен быть ИД галеры по которой кликнули , например
 +
 +<code>
 +<thumb num=1-10>
 +    <a href='/scj/cgi/out.php?show_gallery_id=<!--GALLERY_ID-->'>  click  <!--GALLERY_ID--> </a> <br>
 +</thumb>
 +</code>
 +
 +как видно тут на аут передается параметр show_gallery_id=, урлы будут вида out.php?show_gallery_id=12345
 +
 +2. На сайте А меняем урл трейдера (сайт Б) (только тех которые на одной базе и буду поддерживать эту фичу)
 +
 +  http://trader/?first_gallery_id={GET_show_gallery_id}
 +
 +
 +тут надо отметить появление {GET_show_gallery_id} из пункта 1, те при переходе к трейдеру этот параметр  будет заменен на то что передано ауту, и к трейдеру пойдет http://trader/?first_gallery_id=12345 
 +
 +
 +3. у трейдера в темплейте индекс добавляем 
 +
 +
 +<code>
 +
 +<thumb num=1 gallery_id=GET_first_gallery_id limit_by_gallery_id=true>
 +    first gallery <!--GALLERY_ID--> <!--THUMB_URL--> <br>
 +</thumb>
 +
 +</code>
 +
 +
 +тут надо отметить gallery_id=GET_first_gallery_id который берется из пункта 2
 +
 +
 +Все.
 +
 +
 +
 +===== Rotate for Rows =====  
 +
 +Есть полезная опция ротации
 +
 +  Rotate page for raws
 +  ie if surfer visits us for a second time - show him second page instead of the first one 
 +
 +
 +те если серфер заходит на индекс сайта, то мы автоматически можем менять параметр &page=, те при первом заходе юзер видит фактически &page=1, при втором (когда юзер уже не уник) &page=2 - те если у вас на индексе выводятся просто тумбы 
 +
 +  <thumb num=1-10>
 +  
 +то при первом заходе юзер увидит тумбы 1-10, при 2м тумбы номер 11 - 20.
 +
 +
 +**Если же у вас на индексе тумбы категорий** то ситуация другая и есть 2 варианта
 +
 +1. если у вас например всего 100 категорий, а вы выводите на индексе 50 
 +
 +  <category num=1-50 adjust_num_to_page=true
 +  
 +
 +то на первый заход будут категории  1 - 50, а на второй 51 - 100
 +
 +
 +
 +2. если у вас всего 100 категорий и вы выодите все 100 на индексе
 +
 +  <category num=1-100
 +
 +
 +в этой ситуации что бы показать другие тумбы надо создать дополнительный комплект тумб категорий. Для этого в сетингах ротации Category thumbs - включаем set 2 (и например еще и set 3).  У нас получается 3 комплекта тумб категорий.
 +
 +
 +в темплейте добавляем номер сета 
 +
 +
 +  <category order=clicks num=1-10 set_id=GET_page>
 +  <!--CATEGORY_NAME--> <!--THUMB_URL--> <br>
 +  </category>
 +
 +
 +тут надо обратить внимание на set_id=GET_page. И скрипт будет ротировать 3 сета тумб категорий.
 +
 +
 +===== Custom Vars for Ads =====  
 +
 +Если используется один и тот же код для вставки рекламы то я часто вижу что-то вроде 
 +
 +1. создаем темплейт ads в котором 
 +
 +$ads = '<a href= .. > <img = .. ';
 +
 +2. в темплейтах страниц  добавляется в разных местах 
 +
 +<?=ads?>
 +
 +
 +Проблема в том
 +
 +  - код не кешируется и пхп исполняется каждый раз (такой простой код не особенно добавляет нагрузку, но все же)
 +  - если надо поменять рекламу то надо ходить по сайтам и редактировать темплейт, что не совсем удобно
 +  - клиент может отредактировать на что-то вроде $ads = 'Today's Deal! ';  , получить ошибку пхп из-за неправильных кавычек 
 +
 +
 +Если использовать Rotation - CMS -TPL Custom var то можно
 +
 +  - получить переменные для темпелйта в виде <!--CUSTOM_VAR_MY_VAR1-->  тагов которые кешируются
 +  - Там же можно редактировать эти кастом таги сразу на всем нетворке. Причем как все сразу так и отдельные таги.
 +  - нет проблем с кавычками
 +