Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Тематические форумы > TypoScript практикум

Ответ
 
Опции темы Опции просмотра
Старый 19.06.2009, 19:09   #1
dimal
Новенький
 
Регистрация: 19.06.2009
Сообщений: 15
Unhappy Строка картинок, перемешанных в случайном порядке?

Изучаю Typo3, делаю тестовый сайт. Стоит задача: на всех страницах выдать в строку (или однострочную таблицу) 5 маленьких картинок в случайном порядке из десятка имеющихся, при нажатии стандартно показать большую картинку в окне.

После долгих разбирательств сумел заставить Typo3 (4.2.0) выдавать все картинки, указанные как контент типа image на отдельной (вне меню) странице. Но - как заставить выдать не всё, а только 5 из всех 10-15 имеющихся в случайном порядке?
Полный затык! Уже 3 дня топчусь на месте. Помогите, плиз!

Хотел туда присобачить свой скрипт на PHP (взятый из другого, не-typo3 проекта), чтобы уже готовую таблицу с линками расщепить на элементы и выдать 5 случайных из них обратно... так не смог понять куда его воткнуть чтобы получить уже построенную таблицу в $this->getCurrentVal() из примера. Закомментированный вариант не работает.

Может я вообще чешу правое ухо левой рукой, и где-то есть готовое решение или похожий пример? Как вообще влезть внутрь tt_content.image.20, и надо ли туда влезать? Может PHP_SCRIPT_EXT поможет?

Вот часть Setup:
PHP код:
    workOnSubpart DOCUMENT
    marks 
{
      
IMAGES COA_INT
      IMAGES 
{
// 10=PHP_SCRIPT_INT
// 10 {
//  files = fileadmin/script.inc
        
10 CONTENT
        10 
{
          
table tt_content
          select 
{
// id of page with images = 17
            
pidInList 17            
            
}
          
renderObj tt_content.image.20
          renderObj
.maxW 900
          renderObj
.maxWInText 900
          renderObj
.spaceBelowAbove 0
          renderObj
.colSpace 0
          renderObj
.rowSpace 0
          renderObj
.borderThick 0
          renderObj
.textMargin 0
          renderObj
.renderMethod table
//          renderObj.noStyle = 1
          
}
// end of CONTENT
// }
       
}
// end of IMAGES
// ...
    
}
// end of marks 
Скрипт берущий 3 случайные картинки (не доработан; но даже не получал getCurrentVal() !):
PHP код:
<?
$mycontent 
$this->getCurrentVal();
debug($mycontent);
echo 
$mycontent;
////$list=explode('td',$mycontent);
$list = array("x","y","z","a","b");
$maxpic 3;

$listcount count($list);
$i 0;
$pic = array();
// srand((double)microtime()*1000000);
while ($i $maxpic) {
  
$random rand(1,$listcount);
echo 
$random;
// test all prev:
  
$j 0;
  while (
$j $i) { 
    if (
$random == $pic[$j]) {
// found the same - change and repeat!
      
$random rand(1,$listcount);
echo 
$random;
      
$j 0;
    } 
    else { 
      
$j++;
    }
  }
  
$pic[$i] = $random;

//  echo '<TD><img src="images/'.$list[$random-1].'.jpg"></td>';
  
$content .= $list[$i];
  
$i++;
}
$content '<!--'.$content.'-->';
?>
P.S. Теоретически можно ещё написать свой скрипт с нуля, то есть самому обратиться в базу на SQL, получить список имён картинок, взять 5 случайных и самому сформировать вокруг них требуемые линки с JavaScript и таблицу. Но ведь это уже в Typo3 уже где-то есть; мне достаточно добавить мой скрипт между получением массива картинок и их обёртыванием; можно ли это сделать и как именно? Что именно, какие структуры должен сформировать отдельный скрипт, чтобы указанный мной renderObj обработал их так же, как исходный список картинок?

Последний раз редактировалось dimal; 19.06.2009 в 19:22
dimal вне форума   Ответить с цитированием
Старый 19.06.2009, 19:42   #2
Pavel Antonov
Senior Member
 
Аватар для Pavel Antonov
 
Регистрация: 01.10.2004
Адрес: Россия, Москва
Сообщений: 1,204
Отправить сообщение для Pavel Antonov с помощью ICQ
По умолчанию

По-моему будет достаточно средств TYPO3 и MySQL.

В свою выборку картинок добавте:
Код:
          select { 
// id of page with images = 17 
            pidInList = 17   

// Добавить:
            orderBy = RAND()
            max = 5
          } 
__________________
Павел Антонов
Rich Media Development Ltd.
Блог: http://codeline.richmd.ru/
Pavel Antonov вне форума   Ответить с цитированием
Старый 19.06.2009, 20:10   #3
dimal
Новенький
 
Регистрация: 19.06.2009
Сообщений: 15
По умолчанию

Спасибо, попробую... но разве orderBy - это не название поля? Туда можно всё что угодно писать?

И потом, со своим скриптом тоже хочется разобраться - почему он ничего не получает на вход? Или входом является не getCurrentVal() а что-то другое?

P.S. Влепил, попробовал... ноль внимамания, фунт презрения. Даже на max не прореагировало. Может закешировалось? Но я почистил кеш, да и стоит COA_INT. Сменил pidInList на фальшивый - картинки пропали, вернул - снова вижу десяток в стандартном порядке... Как можно отдебаггить сам запрос в базу, чтобы проверить SQL?
На сегоня хватит, уже голова не варит; завтра для разнообразия почитаю доки не по Typo3, а по SQL. В любом случае спасибо за наводку.

P.P.S. Идиотизм. Включил админ-панель, там стоит правильный SQL и
Non-cached objects/Include /10 CONTENT 705 5 +79 =84 NUMROWS: 1
[STRIKE]со вроде правильными 5 элементами...[/STRIKE] а следом
...-cached objects/Include /10/renderObj USER 928 79
в котором и лежит прежняя десятка. И чистка кеша Clear All Cache не помогает.
Фтопку этот Typo3 вместе с сервером!!!

Последний раз редактировалось dimal; 20.06.2009 в 02:39 Причина: ошибка
dimal вне форума   Ответить с цитированием
Старый 19.06.2009, 20:47   #4
Pavel Antonov
Senior Member
 
Аватар для Pavel Antonov
 
Регистрация: 01.10.2004
Адрес: Россия, Москва
Сообщений: 1,204
Отправить сообщение для Pavel Antonov с помощью ICQ
По умолчанию

Цитата:
Сообщение от dimal Посмотреть сообщение
Спасибо, попробую... но разве orderBy - это не название поля? Туда можно всё что угодно писать?

И потом, со своим скриптом тоже хочется разобраться - почему он ничего не получает на вход? Или входом является не getCurrentVal() а что-то другое?

P.S. Влепил, попробовал... ноль внимамания, фунт презрения. Даже на max не прореагировало. Может закешировалось? Но я почистил кеш, да и стоит COA_INT. Сменил pidInList на фальшивый - картинки пропали, вернул - снова вижу десяток в стандартном порядке... Как можно отдебаггить сам запрос в базу, чтобы проверить SQL?
На сегоня хватит, уже голова не варит; завтра для разнообразия почитаю доки не по Typo3, а по SQL. В любом случае спасибо за наводку.
Должно работать, TYPO3 вроде подставляет в запрос как есть... Почему не работает max - совсем не понятно. Может не туда поставили код?
__________________
Павел Антонов
Rich Media Development Ltd.
Блог: http://codeline.richmd.ru/
Pavel Antonov вне форума   Ответить с цитированием
Старый 20.06.2009, 02:24   #5
dimal
Новенький
 
Регистрация: 19.06.2009
Сообщений: 15
Unhappy

Чё-то я перенервничал, даже не выдержал и из дома посмотрел...
да, похоже RAND() не туда надо ставить, поскольку у меня на 17й странице не 10 элементов контента, а один с 10 рисунками.
Но тогда куда же RAND() вставлять?! В "renderObj < tt_content.image.20" ? Но я и так там 2 дня из 3х возился... где в "tt_content.image.20" находится select?!
Попробовать самому собрать "renderObj = IMGTEXT" с параметрами? Но в описании TSref для IMGTEXT тоже нет select! Единственно похожее поле "imgList.field = image", но где там место для "orderBy = RAND()"?
Между прочим, предусмотренный для IMGTEXT "renderObj.imgMax=5" сработал, а вот наобум вставленное "renderObj.imgList.orderBy = RAND()" не помогло.
В общем, отдохну до понедельника, может что придёт в голову новое...

Последний раз редактировалось dimal; 20.06.2009 в 03:00
dimal вне форума   Ответить с цитированием
Старый 20.06.2009, 11:35   #6
Lucifer
Senior Member
 
Аватар для Lucifer
 
Регистрация: 01.07.2008
Сообщений: 392
По умолчанию

orderBy ставится в select. как понятно из названия, select - это sql запрос.
смотреть где то в районе CONTENT надо, а не IMGTEXT.
Lucifer вне форума   Ответить с цитированием
Ответ


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

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:13.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория