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

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

  • Создайте на корне домена файл 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-->" - тут скрипт перечисляет все доступные тумбы для этой галеры

Custom pagination

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

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

<!--
<pagination>
.
</pagination>
-->

те навигация есть, но в html комменте, при этом скрипт посчитает <!–TOTAL_ITEMS–> и вы сможете дальше использовать это число в своем коде.

Вы можете сделать любую на свой вкус. Например

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

Separate page for a list of 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. эта страница будет видна по ссылке /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 он есть в дефолтных темплейтах) с содержимым вроде

<thumb num=1-100> темпелйте для rss </thumb>

и сабтемплейтом в соответствии с форматом 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
include('./scj/tube/index.php');

Custom title for each template

Например вы инклудите темплейт 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['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 } ?>

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

Например, нам надо вывести на какой-то странице только мувики. Для этого в параметры надо добавить 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');

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

Прежде чем делать отдельный темплейт - подумайте, возможно вам надо не отдельный темплейт, а просто воспользоваться 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 это наши ниши на сайте разделенные запятой.

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

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

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

Актуально только для скрипта версии 1.х

В версии 2.х есть magic rotation parameter, когда в линках не надо ничего

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

/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',
				{
				'gallery_id': '<!--GALLERY_ID-->',
				'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',
	{
	'gallery_id': '<!--GALLERY_ID-->',
	'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 in template

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

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

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

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

<?php echo strtoupper('<!--ESCAPED_DESCRIPTION-->')?> 

Comments

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

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

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

Добавляем 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>

Все.

Geo targeting

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

<?
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 и прочее) на другие языки.

Rotation - CMS Templates - Tpl Custom Var добавляем кастом переменные, например most_popular, эту перменную можно использовать в темплейтах как <!–CUSTOM_VAR_MOST_POPULAR–> , при этом можно задать отдельный перевод для каждого языка.

Другой 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/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>

]}

Как проверить: /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

Допустим, мы хотим создать сайт с 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 и темпелйт его будет

<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% одинаковые) либо если контент в целом пересекается.

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

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

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

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

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

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

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

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

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

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

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

Content when No Content found

Например, человек искал какой-то кейворд которого у вас на сайте нет, ему выдало 0 результатов поиска. Но вы хотели бы показать хоть что-то.

Есть 3 варианта:

Первый

По умолчанию если ничего не найдено - показывает темпелйт content_not_found , те если там вывести

<thumb num=1-10 order=easy_random > 

то это и будут ваши рендомные галеры

Вариант 2

если не хочется менять content_not_found то делаем отдельный темплейт random_content

Nothing found , look at those links

<thumb num=1-10 order=easy_random zero_items_to_404=off> .... 

а сам темплейт (content_search) поиска поменять как


<?if (<!--TOTAL_ITEMS--> == 0) { ?>

<script>
window.location.replace("https://yourdomain/?force_template=random_content"); (тут конечно реврайт какой добавляем)
</script>

<? } else { ?>

выводим тумбы как обычно в поиске 

<? } ?>

в этом сулчае ничего лишнего не добавляется.

Вариант 3

Просто меняем content_search как

<?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> .... 
выводим тумбы как обычно в поиске 

<? } ?>

Этот вариант проще но минус в том, что даже если что-то найдено то <thumb num=1-10 order=easy_random> таг будет обработан ( пхп отразабывает после макросов скрипта) а это значит немного больше нагрузки.

Lasted Visited Galleries

Это пример использования кеша в темпелйтах и макросах

Добавляем в темплейт галерей (например content_page) следующий кусок кода

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>

Тут надо отметить для себя

  1. Cache::set('last_items', $last_items - добавляем в кеш просомтренные ИД
  2. в таге выводим подхватывая из кеша <thumb num=1-10 limit_by_gallery_id=true gallery_id=CACHE_last_items order=row >
  3. в список последних просмотренных добавляется только если есть if ('<!–GALLERY_ID–>') {
  4. но сам список можно выводить и на индекс

Тут надо понимать что

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

Тут есть 2 варианта:

  1. оставить как есть тк для серфера это не так важно
  2. уменьшить время кеша (cache_time=100)

Lasted Visited Galleries By Country

Тут надо немного более глубокое понимание процесса.

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

Что бы избежать этого можно пойти другим путем

  1. например на индексе делаем код колторый запрашиват условно страницу last_viewed.php и отображает содержимое
  2. получается что index будет одинаковый для всех и только last_viewed.php надо будет отработать 190 (по количеству стран)

Пошагово как сделать

1. в темплейт галеры добавляем

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);
		
	}


?>

тут в кеш перменную

$cache_id = 'last_items_' . $_SERVER['GEOIP_COUNTRY_CODE'];

добавляется список галер (последние 100). Как видно перменная зависит от страны.

2. создаем новый темпелйт viewed_in_country

<thumb num=1-10 limit_by_gallery_id=true gallery_id=CACHE_GET_last_viewed_cache_id order=row >
	<!--GALLERY_ID--> ......<br>
</thumb>

тут надо обратить внимание на gallery_id=CACHE_GET_last_viewed_cache_id те список gallery_id берем из CACHE, переменная которая будет передана в GET с именем last_viewed_cache_id

3. там где надо вывести список галер по текущей стране

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

тут основное это то что мы запрашиваем урл

./?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). для этого в параметрах аута должен быть ИД галеры по которой кликнули , например

<thumb num=1-10>
    <a href='/scj/cgi/out.php?show_gallery_id=<!--GALLERY_ID-->'>  click  <!--GALLERY_ID--> </a> <br>
</thumb>

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

<thumb num=1 gallery_id=GET_first_gallery_id limit_by_gallery_id=true>
    first gallery <!--GALLERY_ID--> <!--THUMB_URL--> <br>
</thumb>

тут надо отметить 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?>

Проблема в том

  1. код не кешируется и пхп исполняется каждый раз (такой простой код не особенно добавляет нагрузку, но все же)
  2. если надо поменять рекламу то надо ходить по сайтам и редактировать темплейт, что не совсем удобно
  3. клиент может отредактировать на что-то вроде $ads = 'Today's Deal! '; , получить ошибку пхп из-за неправильных кавычек

Если использовать Rotation - CMS -TPL Custom var то можно

  1. получить переменные для темпелйта в виде <!–CUSTOM_VAR_MY_VAR1–> тагов которые кешируются
  2. Там же можно редактировать эти кастом таги сразу на всем нетворке. Причем как все сразу так и отдельные таги.
  3. нет проблем с кавычками
ru/new_rotation_hints.txt · Last modified: 2024/02/11 08:35 by admin