User Tools

Site Tools

Translations of this page:

ru:new_rotation_hints

Table of Contents

New Rotation Hints

Setting GET parameters

Это один из важных пунктов, который надо обязательно понять, потому что далее он много где используется. Как уже было сказано в How it works все страницы в новой ротации формируются фактически одним скриптом и получается разный результат в зависимости от входных паратмеров. Грубо говоря /scj/tube/index.php?group_name=phones выведет тумбы группы phones, а /scj/tube/index.php?group_name=cars - выведет тумбы группы cars. Хотя на сайте это будет выглядеть как /category/phones/ и /category/cars/ - красивые урлы получаются благодаря реврайтам (что такое реврайты 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 с содержанием

<?php
$_GET['group_name'] = 'phones';
$_GET['force_template'] = 'super_template';
include('./scj/tube/index.php');

и получаем красивый урл http://yourdomain/super_phones.php

Но плюс этого варианта еще и в том, что параметры можно гибко менять прямо на пхп под какие то условия, котоыре не предусмотрены в скрипте , например

<?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');

Как вывести на морде только популярные тумбы, категории не надо.

Просто в темпелйте index уберите таг <category>….</category>, и добавьте сколько надо тагов тумб

 например <!--default_1-100--> 

Как вывести на морде самые популярные тумбы, НО только одной категории.

  • В rotation - groups посмотрите ИД нужной вам группы, условно ИД = 21. (Что бы узнать номер группы надо навести на нее мышку в rotation - groups , всплывет подсказка с ИД группы)
  • Создайте на корне домена файл main.php вида (обратите внимание, что надо номер группы, а не название)
<?php
$_GET['group_id'] = 21;
include('./scj/tube/index.php');
  • Пропишите ПУТЬ (НЕ УРЛ !!!) к этому файлу в Settings - CJPages (до этого у вас там скорее всего был прописан путь к scj/tube/index.php - эту строку удаляйте, должна остаться только 1 строка с путем к main.php)
  • обратите внимание, что в этом случае на морде по дефолту будет использоваться темплейт content_list, если надо index то надо добавить $_GET['force_template'] = 'index';

Как сделать по умолчанию сортировку по дате, те фактически без ротации на морде, как обычный туб

  • Создайте на корне домена файл main.php вида
<?php
$_GET['order'] = 'date';
include('./scj/tube/index.php');
  • Пропишите ПУТЬ (НЕ УРЛ !!!) к этому файлу в Settings - CJPages (до этого у вас там скорее dcuj был прописан путь к scj/tube/index.php - эту строку удаляйте, должна остаться только 1 строка с путем к main.php)
  • Все.

Как организовать трейд по группам с использованием новой ротации (реврайтами)

Для начала как траффик попадает от трейдера к вам:

У трейдера многонишевый сайт:

  • Проще всего настроить редирект в нужную нишу по реферу (это в redirects )
  • Там же можно настроить и кастом слова если называния ниш трейдера сильно не совпадают с вашими

У трейдера однонишевый сайт

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

Все. Больше ничего для простых вариантов делать не надо.

Если по каким-то неизвестным причинам авторедирект вам не походит и вы хотите old-style с настраиванием каждого трейдера отдельно то варианты следующие:

  1. создаете реврайт например

RewriteRule ^niche\.php$ /?niche_name=niche

и просите трейдера слать http://yourdomain/niche.php
- вариант 2 это создать файлик например niche.php вида 
<?php
$_GET['group_id'] = 21; // это ид ниши ротации
include('./scj/tube/index.php');

и далее либо трейдер сразу шлет на http://yourdomain/niche.php либо заходим в редактирование трейдера и выставляем ему niche.php как персональную страницу.

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

Теперь раздача по группам на ауте.

Вариант 1

  • Создайте группы для трейда, названия группы трейда должно совпадать с названием групп ротации. В Апдейте 45 в rotation - groups даже появилась специальная кнопочка, которая копировала назыания групп.
  • добавьте реврайт. Как видите в нем в линке к ауту учтена группа
RewriteRule ^gal/(.*)/(.*)/index.html?(.*)$ /scj/cgi/out.php?link=images/%{QUERY_STRING}&group=$1&url=content&slug=$3
  • и поменяйте сабтемплейт которым выводятся тумбы, что бы линки были примерно такие
a href='/gal/<!--GROUP_NAME-->/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->'

Как не сложно заметить тут через реврайт передается имя группы.

Вариант 2

В апдейте 48 появилась фича Trade by groups

У нас классический мультинишевый сидж, мы хотим трейдить по группам. Для этого надо добавить &group=… в урле, однако для сидже туба с реврайтами это не так удобно и красиво как хотелось бы. Те если по дефолту линки выглядят как /gallery/cool_gal/index.html, то для трейда по группам нам надо сделать что-то вроде /gallery/current_group/cool_gal/index.html + немного поменять реврайт, что бы ауту был передан параметр группы. Для кого это сложно есть другой вариант.

Если вы используете дефолтные реврайты значит у вас страницы категорий имеют урл типа /category/123/asian/ или просто /category/asian/, значит если человек кликает в этой категории, то на ауте мы можем определить в какой категории был сделан клик по реферу, и в зависимости от категории слать на разные группы трейдеров.

Итого, дабы заюзать эту функцию надо:

  1. Если у вас еще не созданы, то создать группы трейда с именами как категории ротации. Кстати сделать это можно одним кликом в Rotation - Groups (Copy To Trade Groups)
  2. Распределить трейдеров по группам
  3. Rotation - CMS - Tube settings включить опцию Niche trade
  4. все :)

Вариант 3

Обычно на мультинишевом сидже довольно много ниш, больше чем ниш в которых хотелось бы распределить трейдеров, например 500 ниш в ротации, а трейдеров хотелось бы распределить только по 15 группам.

  • Создайте группы для трейда, допустим тех же 15 штук, названия могут совпадать или не совпадать с названиями групп ротации - это не важно.
  • в группах ротации найдите поле custom var1 и для каждой группы ротации пропишите имя трейд группы которая будет использована
  • добавьте реврайт. Как видите в нем в линке к ауту учтена группа
RewriteRule ^gal/(.*)/(.*)/index.html?(.*)$ /scj/cgi/out.php?link=images/%{QUERY_STRING}&group=$1&url=content&slug=$2
  • и поменяйте сабтемплейт которым выводятся тумбы, что бы линки были примерно такие
a href='/gal/<!--GROUP_CUSTOM_VAR1-->/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->'

Thumbs' Rolling

Ролинг тумб - с одной гали мы берем например 5 тумб в ротацию, дабы найти лучшую. Можно по наведении мышки на тумбу устроить ролинг тумб с галеры. Такой подход развит в тубах, в пиксовых сайтах такого не было еще ( Вот пример для пиксовой галеры, надо навести выш на любую тумбу и подождать долю секунды) и конечно же такой же вариант для мувисных галер.

Сделать очень просто:

  • в темплейт добавляем JS код, который устраивает ролинг для всех картинок, ИД которых начинается на rot
<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>
  • тут ролинг для тумб, ИД которых начинается с 'rot'. Саб будет выглядеть примерно так:
<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> 

тут 2 момент,на которых и работает роллинг:

id='rot<!--GALLERY_ID-->' - скрипт делает роллинг только тех тумб, у которых ИД начинается с rot 
rel="<!--ALL_THUMBS-->" - тут скрипт перечисляет все доступные тумбы для этой галеры

Нестандартная навигация

Если вам не подходит стандартная навигация, то вы можете сделать любую на свой вкус. Например

$total_pages = ceil(<!--TOTAL_ITEMS-->/100);
for ($i = 1; $i <= $total_pages; $i++) {
echo "<a href='/?page={$i}'>{$i}</a>";
}

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

Вариант 2

В большинстве случаев серферам 25я страница совершенно не нужна и люди туда в большинстве случаев не ходят, поэтому имеет смысл ограничить их например 5 иил 10ю страницами и просто вписать их в темплейт как есть

<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>
и тоже самое для остальных страниц.

Обратите внимание, что в mysql есть 2 варианта выборки из базы - когда считается общее кол-во результатов по запросу и когда нет. Второй вариант быстрее. Соответственно, когда нет <navigation тага скрипт думает что точные числа не нужны, например используется prev\next, и делает запрос 2м вариантом. После этого пытается подобрать кол-во на основе каких-то других парамтеров, что иногда может быть не совсем точно.

Поэтому если надо своя навигация, и все же точное число TOTAL_ITEMS - надо вставить что-то вроде

<!--
<navigation>
.
</navigation>
-->

те навигация есть, но в html комменте.

Как сделать отдельную страницу с категориями

Варианта 2 Первый

1. Создаем кастом темпелйт, например cat_template в котором вывод самих категорий например

<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>

2. эта страница будет видна по ссылке /scj/tube/?force_template=cat_template

3. что бы получить красивую ссылку добавим реврайт

RewriteRule ^categories$ /?force_template=cat_template

и страница будет открываться по ссылке domain.com/categories

Вариант 2

1. Создаем кастом темпелйт, например cat_template в котором вывод самих категорий например

<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>

2. созадем файл categories.php на корне домена в котором

<?php
$_GET['force_template'] = 'cat_template';
include('./scj/tube/index.php');

3. страница доступна по ссылке domain.com/categories.php

Как сделать sitemap

По дефолту сайтмап у вас есть в scj/sitemap.php но если вдруг почему то его нет, то

1. Создайте темплейт sitemap (начиная с апдейта 46 он есть в дефолтных темплейтах) с содержимым вроде

<!--default_1-1000-->

и сабтемплейтом в соответствии с форматом сайтмап.

2. на корне домена создайте файл sitemap.php

<?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');

Обратите внимание, что если вы юзаете описания в которых есть спецсимволы, например & (амперсант) то в темпелйте надо использовать CDATA (если не в курсе что это такое то имеет смысл открыть google).

Учитывая что этот пункт доки мог быть написан довольно давно относительно момента когда вы его прочтете, имеет смысл еще раз проверить доки гугла относительно правил для сайтмапа. Кроме того, в правила гугла написано, что размер сайтмапа должен быть не более опредленного, поэтмоу если у вас больше 1-2-3к галер то вам в любом случае надо разделить на страницы по ?page=1 ?page=2 и тп. (см setting_get_paramaters

Как сделать RSS

1. Создайте темплейт rss (начиная с апдейта 47 он есть в дефолтных темплейтах) с содержимым вроде

<!--default_1-10-->

и сабтемплейтом в соответствии с форматом rss.

2. на корне домена создайте файл rss.php

<?php

define('CACHE_TIME', 86400);
$_GET['force_template'] = 'rss';
$_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
include('./scj/tube/index.php');

Разные title для разных страниц

Темплейт header инклудится ко всем темплейтам, поэтому если вы хотите разные титлы дляразных страниц - есть 3 варианта.

  • Сделать header пустой и в каждый темплейт прописать все то, что должно быть в хедере, включая титл.
  • Оставить 1 хедер для всех, но добавить немного кода. Вот пример темплейта header.

Вариант в зависимости от темплейта

<?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
<? } ?>

В зависимости от переданных в урле переменных

<html>
<?php if ($_GET['content_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 } ?>

Быстрая Навигация

Так же называют “пагинация”, простыми словами - ссылки для “листания” страниц 1 2 3 и тп.

Базовый вариан выглядит примрено так:

<navigation>
<li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<!--PAGE_NUM-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM--></a></li>
</navigation>

Однако с большими базами нагрузка на подсчет конкретного кол-ва тумб в категории\поиске начинает нагружать базу, в то время как пользователю не важно у вас 123444 галеры или 134567. Более того: обычный пользователь обычно никогда не ходит на последние страницы, просто потому что ему неинтересны наименее релевантные результаты поиска или последние по цтр тумбы. Именно поэтому гугл пишет “Found 10 of about 100000 results” и дает ссылки только на первые 10 страниц.

Начиная с апдейта 46 введен следующий нюанс: если у вас на странице есть навигация в базовом варианте - все будет работать как и раньше в целях совместимости. Если у вас большая база и вы хотите скономить ресурсы то имеет смысл заменить ее на такой вариант

Если тэга <navigation> нет, то точное кол-во не подсчитывается, это экономит ресурсы.

Дабы сохранить навигацию можно использовать следующий пример

<?php if ('<!--PREV_PAGE-->') { ?>
<li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<!--PREV_PAGE-->/" title="<!--PREV_PAGE-->"><!--PREV_PAGE--></a></li>
<?php } ?>

<?php if ('<!--NEXT_PAGE-->') { ?>
<li><a href="/category/<!--CATEGORY_ID-->/<!--CATEGORY_NAME-->/<!--SORT_ORDER-->/<!--NEXT_PAGE-->/" title="<!--NEXT_PAGE-->"><!--NEXT_PAGE--></a></li>
<?php } ?>

Получим навигацию вида:

Prev Next

Пересоздание категорий

Категории пересчитываются каждые 15 минут, соответственно после добавления категории она не появится сразу на сайте. Если надо сделать это прямо сейчас, то надо запустить

cd /full_path_to/scj/bin; env HTTP_HOST=yourdomain.com php rot.php prepare_tube_vars=true

Сайт без категорий или навигация на индексе

Навигация будет выглядеть так:

<navigation>
<a href="/?page=<!--PAGE_NUM-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM-->/a>
</navigation>

или так

<a href="/category/All/0/<!--SORT_ORDER-->/<!--PAGE_NUM-->/" title="<!--PAGE_NUM-->"><!--PAGE_NUM-->/a>

Как сделать разделение по типу контента

Например, нам надо вывести на какой-то странице только мувики. Для этого в параметры надо добавить content_type=movie

http://domain.com/scj/tube/?group_id=5 - весь контент из группы 5
http://domain.com/scj/tube/?group_id=5&content_type=movie - только мувики из группы 5

Так же можно использовать image и flash

Все это так же работает через файл

<?php
$_GET['group_id'] = 5;
$_GET['content_type'] = 'movie';
include('./scj/tube/index.php');

Ротация баннеров

Можно ротировать баннеры рендомно, по цтр возможности пока нет.

<?
if (rand(0, 100) > 50) {
?>
<!--SPOSNOR_BANNER1-->
<?} else {?>
<!--SPOSNOR_BANNER2-->
<? } ?>

Отдельный темплейт для опредленной категории

Прежде чем делать отдельный темплейт - подумайте, возможно вам надо не отдельный темплейт, а просто воспользоваться custom vars для категорий и таким образом решить этот вопрос. Однако, если вы уверены, что надо совершенно другая страница то сделать это можно следующим образом:

  1. Rotation - CMS pages - создаем новый темплейт например cat_new.tpl
  2. в common.php пишем следующее (после <? )
if ($_GET['group_id'] == '1' or $_GET['group_name'] == 'group_name') $_GET['force_template'] = 'cat_new';
где 1 и group_name это соотв ИД и имя нужной вам категории

Блог на субдомене

  1. Создаем субдомен, копируем на корень common.php, index.php, а так же 2 каталога scj/cgi и scj/tube + создаем .htaccess как обычно
  2. В базовой админке создаем темплейты, например blog_index, blog_content_list и тп
  3. У нас получилось 3 комон, дабы не путаться делаем во всех 3х сделаем одинаково
После <? добавляем

if ($_SERVER['REQUEST_URI'] == '/') {
$_GET['force_template'] = 'blog_index';
} elseif (isset($_GET['group_id'])) {
$_GET['force_template'] = 'blog_content_list';
}

Скимминг на кастом галерах

В версии 46 добавлена новая опция - скимминг на галерах.

Rotation - CMS - Tube Settings можно поставить custom gallery skimming например в виде

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% контент

Обратите внимание, что работает это только если вы линкуете не прямо на контента, а через скрипт, например

<a href='/gallery/<!--SAFE_DESC-->/<!--GALLERY_MD5-->/1.html'><img src='<!--IMG_1_THUMB-->'></a>

Нишевая продажа трафа

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

Например, обычно все продают траф по линке http://brocker.com/in.cgi?your_id 
В этом случае, если у вас мультиниш, ваш траф считается как мультиниш траф.
Но биржа предоставляет возможность слать траф как http://brocker.com/in.cgi?your_id&niche=test , где test это ниша. Такой траф уже считается как нишевый и может стоить больше.

Для этого мы добавляем в урл продажи параметр {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 это наши ниши на сайте разделенные запятой.

Ротация тумб категорий

Тестовая опция. По дефолту тумба категории = лучшая тумба из этой категории. Возможно, если брать рендомно одну из первых 10 тумб - это поднимет проду на индексе. Сделать это можно в Rotatio - CMS - Settings (category thumb)

PHP in navigation

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

дефолтно это выглядит примерно так
<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>

Что такое 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-->'>

Дополнительные страницы

Можно создать любое кол-во дополнительных страниц. Какие на них будт отображены тумбы зависит только от УРЛа, например:

  1. Создаем страницу Rotation - CMS Pages , например mypage
  2. domain.com/?force_template=mypage выведет тумбы из всех категорий
  3. domain.com/?force_template=mypage&sponsor_id=1 выведет тумбы спонсора с ИД 1
  4. domain.com/?force_template=mypage&group_id=1 выведет тумбы группы с ИД 1

И так далее.

Как сделать персональный темплейт трейдеру в новой ротации

  1. Создайте темплейт в Rotation - CMS pages, например trd_tpl
  2. Создайте файл например trd_tpl.php на корне домена следующего содержания
<?php
$_GET['force_template'] = 'trd_tpl';
include('./scj/tube/index.php');

и пропишите ПУТЬ (!НЕ УРЛ!!!) к этому файлу в редактировании трейдера.

Как убрать параметр ротации из линков (1x23x456)

Не секрет что обычно линки выглядят следующим образом:

/gallery/cool_gallery/index.html?12x34x56

12x34x56 - это параметры ротации, цель - избавиться от этого в урле дабы выглядело это эстетичнее.

Можно сделать следующим образом:

1. В сабе ссылки у вас выглядят примертно так:

<a href="/gallery/<!--GALLERY_SLUG-->/index.html?<!--THUMB_LINK-->"> <img ...> </a>

заменяем на 

<a href="/gallery/<!--GALLERY_SLUG-->/index.html" rot_id='<!--THUMB_LINK-->'> <img ...> </a>

как ни сложно заметить мы вынести <!–THUMB_LINK–> в параметр rot_id

2. в <head> добавляем

<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>

Тут “не нравится” бывает 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 изменения окончания линков

В реврайтах меняем

RewriteCond %{QUERY_STRING} ^(.+)$ 
RewriteRule ^gallery/([^/]+)/index.html$ /scj/cgi/out.php?link=images/%{QUERY_STRING}&url=content&slug=$1 [L]

на

RewriteCond %{QUERY_STRING} ^param=(.+)$
RewriteRule ^gallery/([^/]+)/index.html$ /scj/cgi/out.php?link=images/%1&url=content&slug=$1 [L]

как видно тут добавлен 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 и тп , одним словом какой-то другой вид.

в сабе делаете

$my_var = explode('x', '<!--THUMB_LINK-->');

получаете массив

Array
(
[0] => 12
[1] => 34
[2] => 56
)

и можете из него формироваль линк как угодно

например вариант с a b с

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'];
}

Таким образом можно сделать пармтеры с любыми именами или точками, одним словом фантазия никак не ограничена.

Как вывести в навигации все страницы

Обычно навигация (она же пагинация) выглядит примерно так 1 2 3 … 40 41 42.

Если надо вывести все 42 без … надо навигацию заменить примерно на следующее

Было 

<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; соотв кол-во тумб на старницу в вашем темплейте.

Рейтинг

Что бы добавить рейтинг кастом галер надо (на примере content_custom_pic)

Добавляем стили что б звездочки были красивые

<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>

Добавляем JS скрипт который будет красиво делает mouseover для звездочек

<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',
				{
				'content_id': '<!--GALLERY_MD5-->',
				'action': 'rating',
				'rating': value
				},
  			function(data) {
        	    $('#rating_div').html('Thank you!');
	  			}
			);
	}
	});
});
</script>

Добавляем конкретно сами звездочки

<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>

Все.

PS Вывести рейтинг можно где угодно тагом <!–RATING–> - это будет число из которого можно получить что угодно. простейший пример в сабе

<? if(<!--RATING--> > 0) echo '*' ?> 
<? if(<!--RATING--> > 1) echo '*' ?> 
<? if(<!--RATING--> > 2) echo '*' ?> 
<? if(<!--RATING--> > 3) echo '*' ?> 
<? if(<!--RATING--> > 4) echo '*' ?> 

Рейтинг +1\-1 like\dislike

И прочие 2хвариантные рейтинги. Смысл очень простой: оставляем только 2 пункта из того же рейтинга пунктом выше. Это будут рейтинг 1 и 2. Условно если юзер поставил 1 это значит dislike , если 2 то like. Соответственно если по результатам у нас получилось среднее 1.5 - значит 50\50 ставили лийки. 1.75 - значит 75% like, 25 dislike. Надеюсь смысл ясен.

Техническая реализация:

Добавляем JS скрипт, который будет постить результат голосования

<script src='/scj/includes/js/jquery.js' type="text/javascript"></script> ЭТО НАДО ТОЛЬКО 1 РАЗ, ЕСЛИ У ВАС ОНО УЖЕ ЕСТЬ В ТЕМПЛЕЙТЕ ТО 2Й РАЗ ВСТАВЛЯТЬ НЕ НАДО

<script>
function post_rating(value) {

$.get('/scj/tube/index.php',
	{
	'content_id': '<!--GALLERY_MD5-->',
	'action': 'rating',
	'rating': value
	},
	function(data) {
   	    $('#rating_div').html('Thank you!');
	}
);
}

</script>

Добавляем сами кнопки голосования и вывод рейтинга

<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 заменяются на пальчики, галочки и прочее что угодно

Все.

PHP code в темплейтах

Как вы вероятно знаете, в темплейтах можно использовать пхп код. Рассмотреть все ньансы языка в одном ньансе конечно не получится, да и видимо не надо, однако хотелось бы показать небольшой пример. Например, нам надо вывести деск, таг <!–DESCRIPTION–> и мы решили сделать его весь большими буквами, на пхп это очень просто:

меняем <!--DESCRIPTION--> на <?php echo strtoupper('<!--DESCRIPTION-->')?> 

Однако тут есть ньанс: если в деске окажется ковычка, то получится что-то вроде <?php echo strtoupper('masha's super pic')?> те незакрытая ковычка и выскочит ошибка пхп. По этой причине такой вариант “в лоб” можно использовать только если вы уверены, что во фразе не будет ковычки (напрмиер урл гали ?). В остальных случаях надо пользоваться тн синтаксис heredoc

    
Пример, с <!--DESCRIPTION--> будет выглядеть как:

<?php
$myvar =  <<<EOB
    <!--DESCRIPTION-->
EOB;
echo strtoupper($myvar);
?>


Это немного длинее, однако безопасно. Вместо strtoupper я думаю буудт интересны так же strtolower (все в нижний регистр), ucfirst (первая буква большая).

Комменты

Комменты так же просто добавить

Добавляем код, который будет постить коммент без перезагрузки старницы (AJAX)

<script src='/scj/includes/js/jquery.js' type="text/javascript"></script> ---- эта строка не обязательна если jquery уже где-то инклудится, например в рейтинге.

<script>
function post_comment() {

	$.post(
		'/scj/tube/',
		{
		'action': 'add_comment',
		'content_id': '<!--GALLERY_ID-->',
		'captcha': $('#captcha').val(),
		'username': $('#username').val(),
		'comment': $('#comment').val()
		},
	function(data) {
		var t = data.split('|');
		if (t[0] == 'ERROR') {
			$('#comment_error').text(t[1]);
		} else {
			$('#comment_error').text(' ');
	    	$('#add_comment').html('Thank you ! Your comment will be reviewed by admin.');
	    }

		}
	);
}
</script>

Добавляем html форму комментов

<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>

и добавляем вывод уже имеющихся комментов

<!--TOTAL_COMMENTS-->

<comments num=1-10>
<!--DATE--> <!--USERNAME--> : <!--COMMENT-->
</comments>

Все.

Баннеры по гео признаку

Фактически это пример пхп кода в шаблонах

<?
if ($_SERVER['GEOIP_COUNTRY_CODE'] == 'GB') {
?>

код баннера 1

<? } else { ?>

код баннера 2

<? } ?>

Два индекса с разным типом контента

Условно надо 2 страницы с мувисным и пикчевым контентом. Например, movies.php and images.php

Варианта 2

1. Делаем все на одном темпелейте

  • создаем 2 файла вида
<?php
$_GET['content_type'] = 'image'; // для второго файла 'movie'
include('./scj/tube/index.php');
  • любую из этих страниц прописываем в CJ Pages - это и будет индекс сайта
  • поскольку темпелйт тут не указан - будет использован index
  • если в дизайне вы как-то работаете по-разному с разными размерами мувисных и пикчевых тумб то для обработки используйте код вида
<?php
if ($_GET['content_type'] == 'image') {
?>
текст 1
<?
} else 
?>
тесткт 2
<?
}

обратите внимание что этот код можно использовать как в сабе так и в самом темплейте.
соотвественно ссылки для пагинации будут movies.php?page=2 и тп

Вариант 2. Делаем 2 разных темпелйта например index_movies and index_images с нужным дизайном и навигацией а так же 2 файла вида

<?php
$_GET['content_type'] = 'image'; // для второго файла 'movie'
$_GET['force_template'] = 'index_images'; // для второго файла 'index_movies'
include('./scj/tube/index.php');

Перевод меню сайта ( i18 )

Довольно просто сделать перевод меню сайта (те ссылок типа Most Popular, Order By date и прочее) на другие языки.

1. Делаем кастом темплейт например languages в котором будет код слов

<?php 
$my_keywords['en'] = array(
  'most_popular' => 'Most popular',
  'order_by_date' => 'Order By Date',
  и так далее
);
$my_keywords['ru'] = array(
  'most_popular' => 'Самые популярные',
  'order_by_date' => 'Сортировать по дате',
  и так далее
);

$my_keywords['de'] = array(
  'most_popular' => 'Populärste',
  'order_by_date' => 'Sortiert nach Datum',
  и так далее
);

и так далее сколько угодно языков

далее 2 варианта подставления языка: 

по языку браузера

if (strstr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'ru')) {
  $lang = $my_keywords['ru'];
} elseif (strstr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'de')) {
  $lang = $my_keywords['de'];
} else $lang = $my_keywords['en'];

или по geo_ip

if ($_SERVER['GEOIP_COUNTRY_CODE'] =='RU') {
  $lang = $my_keywords['ru'];
} elseif ($_SERVER['GEOIP_COUNTRY_CODE'] =='DE') {
  $lang = $my_keywords['de'];
} else $lang = $my_keywords['en'];


надеюсь в обоих примерах понятно как добавить больше языков

и в конце темпелйта

if ($_GET['force_lng'] and isset($my_keywords[$_GET['force_lng']])) {
  setcookie('force_lng', $_GET['force_lng'], time() + 86400);
  $lang = $my_keywords[$_GET['force_lng']];
} elseif ($_COOKIE['force_lng'] and isset($my_keywords[$_COOKIE['force_lng']])){
  $lang = $my_keywords[$_COOKIE['force_lng']];
}

Все, конец темплейта :)

2. во всех темплейтах где надо будут разные языки инклудим этот созданный темплейт

<!--INCLUDE_TEMPLATE_languages-->

3. В темпелейтах соответствующие слова заменяем на переменные, например

Most popular меняем на <?=$lang['most_popular']?>
Order By Date меняем на <?=$lang['order_by_date']?>
и так далее

с этого момента у вас уже должны быть разные описания для разных языков

4. даем юзеру возможность переключить язык “насильно”

для этого ставим линку вида

http://domain/?force_lng=de (и тп нужных язык в зависимости от массива ваших языков в $my_keywords['de'])

Все.

Отдельная ротация для разных стран\языков

Мысль такая: для азии лучше если на индексе выше будут азиатские категории, для европы - европейские. Как сделать разную ротацию для разных языков. Делается не сложно:

  • сетапим Х сабдоменов для разных морд, допустим это будет jp.domain.com and de.domain.com
  • ставим на каждый из сабдоменов скрипт и делаем его слейвом мастера domain.com
  • в scj/includes/config.php
находим строку 

$config["db_database"] = "scj_db";

и заменяем на код, который будет подключать нужную базу

if ($_SERVER['GEOIP_COUNTRY_CODE'] == 'DE') {
  $config["db_database"] = "scj_db_de";
  $config['cache_prefix'] = 'domain.com_de';
} elseif ($_SERVER['GEOIP_COUNTRY_CODE'] == 'JP') {
  $config["db_database"] = "scj_db_jp";
  $config['cache_prefix'] = 'domain.com_de';
} else $config["db_database"] = "scj_db";

  • таким образуом при создании страницы будет подключена нужная база
  • во всех common.php добавляем код записи в нужных лог
находим строку 

$path_to_data = ".....domain/scj/data/";

и заменяем на код

if ($_SERVER['GEOIP_COUNTRY_CODE'] == 'DE') {
  $path_to_data = ".....de.domain/scj/data/";
} elseif ($_SERVER['GEOIP_COUNTRY_CODE'] == 'JP') {
  $path_to_data = ".....jp.domain/scj/data/";
} else $path_to_data = ".....domain/scj/data/";

Все.

Другой flash плеер

ПО дефолту в скрипте бесплатный плеер Jwplayer, на данный момент это уже немного старый плеер, но он работает :) Если вы хотите любой другой плеер, то главное что вам надо понять что плеер и скрипт никак не связаны. Скрипт формирует html страницу где заменяет таги и все, как отображается страница зависит от браузера. Как играет мувик - зависит от плеера.

По дефолту код примрено такой

<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>

как видно тут вызывается плеер /scj/tube/player/player.swf и ему передаются парамтеры flashvars=“file=<!–FLV_URL–>&image=<!–FLV_THUMB_URL–>”. Вы можете положить свой плеер куда удобно, любой плеет, изменить темпелйт что б он загружал ваш плеер, просто проверьте как ему надо передавать параметры. Например плеер Kernel

<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> 

Как быстро сделать блог на имеющейся базе

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

  • создаем субдомен условно blog.yourdomain.com
  • ставим на этом субдомен smartcj
  • делаем его слейвом yourdomain.com
  • скачиваем темплейты блога
  • заливаем этот файл в Rotation - CMS (внизу Upload Templates )

Все, блог готов :)

Suggestions Based on logged searches

Автоподсказки когда пользователь начинает вводить поиск на основании того что искали ранее

<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>

немного стилей для красоты

<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>

само поле поиска

<input class=inputbox value='' type="text" size="30" id="search_field"> <br>

Сам темпелйт 'search_suggest'

<?php
header('Content-Type: application/xml');
?>{
"query":"<!--ESCAPED_GET_QUERY-->",
"suggestions":[
{"value":"","data":""}

<thumb search_log=all num=1-10 skip_search_log=true search=GET_QUERY>
,{"value":"<!--ESCAPED_SEARCH_QUERY-->","data":"<!--ESCAPED_SEARCH_QUERY-->"}
</thumb>

]}

Как проверить: /scj/tube/index.php?force_template=search_suggest&zero_items_to_404=off&query=… должно выдавать результат с теми поисками которые уже есть в базе

Тоже самое что выше, но подсказывает не по базе поисков, а по базе галер

styles

<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>

a field

<input class=inputbox value='' type="text" size="30" id="search_field"> <br>

JS 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>

темплейт 'gallery_search_suggest'

<?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>

]}

Как видно разница только в том, что в самом темплейте ,а конкретно в таге <thumb

Site with main niches

Let's say we'd like to create a site with 3 main niches and X additional.

Main niches: general (id 1) , gay (2) and shemale(3) and for example 100 niches like 'teen' (id 4), amateur (id 5) and so on

It's pretty obvious that if somebody wants to see 'general' - then he doesn't want to see the rest (niches 2 and 3) so we need kind of a general filter here.

That's why all gallery belong to at least 2 groups: (1 2 or 3) and (4 or 5 for example).

When we show content we can limit galleries to a certain range , let's say a surfer wants to see teens and general only:

/?group_id=4&skip_group_id=2,3

If he wants to see teen but gay we exclude groups 1 and 3

/?group_id=4&skip_group_id=1,3

The same works for search by tag

/?tag=...&skip_group_id=1,3

Category thumbs

Settings - System Thumbs we can setup category thumbs for each main niches

In this example we need 3 sets: for each niche 1 2 and 3. When we select category thumb (ie best thumb for this category) we need to exclude other 2 niches, and here's a field for it : Skip group ids, comma separated

So let say for niche 1 (general) we don't want to see thumbs from 2 and 3 - so we add 2,3 into that field.

We we output category thumbs we can specify the set we want to show

<category num=1-10 set_id=2 

Note what you can pass set id in URL like /?set_id=2

<category num=1-10 set_id=GET_set_id 

Note that some category thumb sets might miss galleries for some specific groups so we can add min_gallery_count filter to skip empty groups

<category num=1-10 set_id=GET_set_id min_gallery_count=1

Тематические фильтры

Например, у нас большая база с разным контентом и категориями условно wheels (id: 1), engine(2), monitors (3), laptops (4) and keybords (5). По факту это 2 группы категорий: про машины (1 и 2) и про компьютеры (3 4 5) Мы хотим дать пользователю возможность фильтровать контент, те он поставил галочку cars то ему везде показывало только контент про машины и аналогично с компьютерами.

Минимум апдейт 49.

Делаем формочку например

<form method="POST">
<input type='hidden' name='set_filter' value='on'>
<input type='checkbox' name='cars' <? if (!isset($_COOKIE['mycookie_cars']) or $_COOKIE['mycookie_cars'] == 'on') echo "checked" ?> > Show Cars<br>
<input type='checkbox' name='computers' <? if (!isset($_COOKIE['mycookie_computers']) or $_COOKIE['mycookie_computers'] == 'on') echo "checked" ?> > Show Computers 
<input type='submit'>
</form>

в common.php добавляем код который будет обрабатывать выбор. Код специально немного упрощен дабы быть проще для понимания

if ($_POST['set_filter'] == 'on') {
	if ($_POST['cars']) {
		setcookie('mycookie_cars', 'on', time() + 86400);
		$_COOKIE['mycookie_cars'] = 'on';
	} else {
		setcookie('mycookie_cars', 'off', time() + 86400);
		$_COOKIE['mycookie_cars'] = 'off';
	}

	if ($_POST['computers']) {
		setcookie('mycookie_computers', 'on', time() + 86400);
		$_COOKIE['mycookie_computers'] = 'on';
	} else {
		setcookie('mycookie_computers', 'off', time() + 86400);
		$_COOKIE['mycookie_computers'] = 'off';
	}

}

// if filter car is off - do not show car groups (1 and 2)
if (isset($_COOKIE['mycookie_cars']) and $_COOKIE['mycookie_cars'] == 'off') {
	$_GET['skip_group_id'] = '1,2';
}

// if filter computer is off - do not show coomputer groups (3,4,5)
if (isset($_COOKIE['mycookie_computers']) and $_COOKIE['mycookie_computers'] == 'off') {
	$_GET['skip_group_id'] = '3,4,5';
}

Все.

Custom flv: content separation

Представим что у нас есть галерея с 3 флеш мувиками как например эта http://babesfarm.com/caprice/movies/kitchen_fuck05/index01.html

Если из нее сделать кастом галерею, но если сделать просто так то получится галерея с 3мя мувиками (в темплейте галереи спонсор грамотно сделал прямые линки на мувики для скриптом которые не умеют грабить флеш контент), 3 флешмувиками и все это будет на одной странице. А мы хотим что бы каждый из мувиков открывался на отдельной странице, как в пиксовым контентом.

Как это сделать:

1. Создадим новый темплейт для флеш галер, где на странице галеры будут толкьо тумбы этой галеры (как у пиксовой), в сами мувики будут проигрываться на отдельной странице (опять же как у пиксовых галер), допустим он у нас будет называться content_flv_gallery и темпелйт его будет

<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>

как тут не сложно заметить тут нет флешплеера и все тумбы указывают на /scj/tube/?slug=<!–GALLERY_SLUG–>&force_template=content_flv_single_item&item_id=…

где есть еще один темплейт content_flv_single_item где и будет флешплеер, а так же item_id - где передается номер мувика из галеры который и надо проиграть.

Содержимое content_flv_single_item

<? 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>

<? } ?>

тут 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 смотрятся не особенно красиво, поэтому можно добавить реврайт например

RewriteRule ^flash_gallery/([^/]+)/([0-9]{1,2}).html$ /scj/tube/?slug=$1&force_template=content_flv_single_item&item_id=$2&%{QUERY_STRING} [L]

и соответственно заменить в темплейте content_flv_gallery

линки вида 
<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>

4. Особенности этой галеры

У нее спонсор разместил 2 вида линков на контент: они флеш, другие в виде ссылок на мувики для скриптов , которыt не умеют грабить флешконтент. Это правильно, но скрипт скачает и тот и другой вариант, хотя выводить мы хотим только флеш. Для нас это плохо только тем, что будет храниться надиске часть контента, который нам не нужен. Соттветственно при доавлении контента можно в импорте выставить Add only this type of content - flash. Это сэкономит немного места на диске.

Навигация в пределах одной галереи

Например у нас есть кастомная пиксовая галерах с некоторым кол-вом картинок. По нажатию на тумбу открывается не сама картинка, а страницу с этой картинкой плюс какая-то допреклама и тп. Можно на этой же странице проставить линки на сл картинки этой галеры, например

<? 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>
<? } ?>

Если у вас другие реврайты не забывайте править линки.

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 

те редиректит на галеру. Если у вас свои реврайты, то надо поменять урл под ваши реврайты.

Это конечно актуально только при

  1. если у трейдера так же SmartCJ
  2. если вы используете либо мастар-слейв (тогда ИД 100% одинаковые) либо если контент в целом пересекается.

Если на сайте трейдера не будет галеры с данным ИД - получится 404.

Кастомизация линков

Линки на галереи в дефолтном варианте /gallery/gallary_slug/index.html для того что бы их поменять надо поменять реврайт + темпелйты , что бы формировались урлы под ваши реврайты.

Аналогично для категорий, тагов и тп.

Единственный нюанс есть с линками категорий: /category/cool/date/1/ - category слово тут меняется через реврайты как и все остальное. cool - название категории, а вот date - это уже сортировка, а скрипт должен увидеть сортировку по понятному ему признаку. Те если туда написать new_galleries_first например то он не поймет что именно надо.

Что бы поменять на такой вариант надо:

Добавить в common.php (note: все они должны быть одинаковые)

if ($_GET['order'] == 'new_galleries_first') {
$_GET['order'] = 'date';
} elseif ($_GET['order'] == 'long_galleries_first') {
$_GET['order'] = 'duration';
} else {
$_GET['order'] = 'ctr';
}

Теперь вариант /category/cool/new_galleries_first/1/ будет срабатывать как надо.

Однако в самой навигации стоит SORT_ORDER, который фактически равно $_GET['order'], а нам надо наш вариант. Поэтому добавляем так же свою переменную в common.php

if ($_GET['order'] == 'new_galleries_first') {
$_GET['order'] = 'date';
$GLOBALS['original_sort_name'] = 'new_galleries_first';
} elseif ($_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';
}

А в темплейте вместо SORT_ORDER - используем <?=$GLOBALS['original_sort_name']?>

PS В таге навигации надо добавить skip_href_deletion=true что бы оно не чистило ваш пхп код.

Random keywords for galleries

Если у вас есть список кейвордов которые вы хотели вы рендомно раскидать по галерам (например создать кастом вар и потом использовать его где-то в галере) то это может сделать так:

  • создайте текстовый файл с кейвордами (условно keywords.txt)
  • пхп скрипт kw.php
<?php 
$lines = file('/FULL/PATH/TO/keywords.txt');
echo $lines[rand(0, count($lines) -1)];
  • убедитесь что в браузере http://domain/kw.php выдает рендомную строку
  • добавляем import replacement вида
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

Все.

Основное тут 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 запретим скачивать файлы напрямую

location ~* /scj/thumbs/galleries/.*\.(flv)$ {
   deny all;
}

и добавляем туда же секретную локацию

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

<?php
if (!$_GET['check'] or $_GET['check'] < time() - 86400) {
	die("Error link");
}

header("X-Accel-Redirect: /protected/" . $_GET["url"]);  

Итого если вы настроили верно 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. Его можно заменить на что угодно.

ru/new_rotation_hints.txt · Last modified: 2018/11/09 10:40 by admin