PDA

Просмотр полной версии : вывод картинок других страниц


GAZok
15.07.2009, 19:57
есть задача: вывести на одной странице картинки нескольких других страниц.

предположительно, думаю, картинки должны добавляться в поле "Files" и потом выводиться при помощи подобного кода:
subparts.header_img = IMAGE
subparts.header_img.file {
import.data = levelmedia: -1,slide
import = uploads/media/
import.listNum = 1
}
но в нем как то указывать ID необходимых страниц

реально ли это?
и нету ли какого то другого более удобного способа?


сразу задам другой вопрос, который меня давно беспокоит. В выше описанном коде используется параметр import.listNum = 1 для указания позиции картинки среди закачанных. по моему это не очень удобно и возможно в некоторых случаях даже и плохо. что если для некоторых страниц не нужно закачивать картинку 0 но нужно закачивать 1. тогда теряется порядок и код не сработает. есть какое либо решение данной не оптимальности?

Sergey M Nikitin
16.07.2009, 11:21
Для вывода данных из базы используйте CONTENT и RECORDS, насчет numList, а чем не устраивает загружать нулевую картинку? Если в поле картинки есть какие-либо данные, то нулевая картинка точно будет, в админке всегда есть возможность поставить нужную картинку на это место.

GAZok
16.07.2009, 12:38
...а чем не устраивает загружать нулевую картинку? Если в поле картинки есть какие-либо данные, то нулевая картинка точно будет, в админке всегда есть возможность поставить нужную картинку на это место.
Кажется мне, что возможен такой случай, когда закачиваются 2-ве картинки на страницу, но обе не являются обязательными. То есть возможно будет потребность для какой то из страниц закачивать только картинку 1, а картинку 0 не нужно (то есть использовать от отцовской страницы "import.data = levelmedia: -1,slide").

Сам с таким случаем пока не сталкивался, но кажется вот-вот столкнусь. Дело в том что я делаю редизайн сайта в котором для некоторых страниц закачаны картинки 0 (используются в хедере). Теперь мне необходимо для некоторых других страниц добавить еще по одной картинке, которые будут использоваться в другом месте. То есть они уже должны быть в позиции 1. Но для этих страниц пока не закачаны картинки 0, поскольку переиспользуются с отцовской страницы. получается что закачать картинку 1 я сразу не могу, сначала необходимо 0, но в этом случае картинка 0 отобразится в хедере, в чем потребности нет.

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

Sergey M Nikitin
16.07.2009, 13:00
Сам с таким случаем пока не сталкивался, но кажется вот-вот столкнусь. Дело в том что я делаю редизайн сайта в котором для некоторых страниц закачаны картинки 0 (используются в хедере). Теперь мне необходимо для некоторых других страниц добавить еще по одной картинке, которые будут использоваться в другом месте. То есть они уже должны быть в позиции 1. Но для этих страниц пока не закачаны картинки 0, поскольку переиспользуются с отцовской страницы. получается что закачать картинку 1 я сразу не могу, сначала необходимо 0, но в этом случае картинка 0 отобразится в хедере, в чем потребности нет.

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

У вас подход не много не правильный, зачем ассоциировать картинку с главной страницей, картинка <=> страница, или вам нужно чтобы определенная картинка выводилась на определенном уровне ?


1.Первая картинка в записи всегда "0"

2.Проще эту картинку определять через TS так как, тогда автоматически будет реализовано наследование от родительских страниц, можно попробовать поизвращаться через MHENU (rootline), сформировать строку-список и тем же import брать последнее значение, то есть ближайшую к странице картинку относительно предков, либо пишите функцию.

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

GAZok
16.07.2009, 13:47
почитал второй пост здесь: http://forum.typo3.biz/showthread.php?t=7518 и понял, что подхожу к typo3 не с той стороны :)

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

сейчас решаю вопрос с:
Для вывода данных из базы используйте CONTENT и RECORDS...
для начала я пытался узнать где именно в БД хранится данные о закачанных картинках. Есть подозрения что в поле media таблицы pages. Но данные там хранятся в типе BLOB и как их оттуда извлечь...... ?

Sergey M Nikitin
16.07.2009, 13:55
Вы сделайте хотя бы один CONTENT объект покрутите, повертите и все станет ясно, ничего "вытаскивать" не надо.

GAZok
16.07.2009, 14:49
попробовал этот вариант:
subparts.testimg = TEXT
subparts.testimg.data = DB : pages:2:media

получил список названий файлов картинок:
4-tunnels-of-light_02.jpg,bdu.gif
но как бы попарсить строку и получить второе название файла чтобы использовать дальше

То что вы советовали относительно CONTENT, попробовал:
subparts.testimg = CONTENT
subparts.testimg {
table = pages
select.orderBy = sorting
select.where = colPos=0
select.languageField = sys_language_uid
##select.pidInList = 2 - так же пробовал этот вариант
select.uidInList = 2
}
в результате ничего не возвращает. не стал с этим запариваться поскольку все равно не понимаю как при помощи CONTENT получить интересующую картинку закачанную в поле file. На сколько я понял CONTENT используется для отображения всего контента заданной страницы

Sergey M Nikitin
16.07.2009, 15:04
subparts.testimg = TEXT
subparts.testimg.data = DB : pages:2:media
subparts.testimg = TEXT
subparts.testimg.import.data = DB:pages:2:media
subparts.testimg.import.listNum = 0 #либо 1 для 2ого изображения 2 для третьего и т.д.
Читайте что есть stdWrap

subparts.testimg = CONTENT
subparts.testimg {
table = pages
select.orderBy = sorting
select.where = colPos=0 #Это поле есть только в tt_content, выборка провалиться
select.languageField = sys_language_uid #это нужно для локализации, если у вас несколько языков сайтов
##select.pidInList = 2 - так же пробовал этот вариант
select.uidInList = 2 #Здесь выбираете конкретную страницу
}Выводить у вас кто будет ? - Никто - для этого надо описать объект renderObj


obj = CONTENT #См. TsRef "CONTENT"
obj{
table = pages
select{ #См. TsRef "select"
select.uidInList = 2
}
renderObj = COA #См. TsRef "COA"
renderObj{
wrap = <div>|</div>
10 = TEXT
10.field = title #См. TsRef "stdWrap"
20 = IMAGE #См. TsRef "IMAGE"
20{
file.import = uploads/pics/ #скорей всего такой хотя надо смотреть где именно хранится фотка, посмотрите в uploads #См. TsRef "stdWrap > import"
file.import.field = media
file.import.listNum = 1 #Либо другой индекс
}
}
}

GAZok
16.07.2009, 15:38
вот код который срабатывает:
subparts.testimg = CONTENT
subparts.testimg{
table = pages
select{
select.where = uid=2
}
renderObj = COA
renderObj{
wrap = <div>|</div>
10 = TEXT
10.field = title
20 = IMAGE
20{
file.import = uploads/media/
#file.import.field = media
file.import.data = DB:pages:2:media
file.import.listNum = 1
}
}
}

но почему то выводится весь список страниц первого уровня меню, а не только страница заданная в условии select.where = uid=2

Sergey M Nikitin
16.07.2009, 15:56
select{
select.where = uid=2
}
у вас ошибка

select{
where = uid=2
}
и лучше использовать


select{
uidInList = 2
}


Будьте внимательны.

Sergey M Nikitin
16.07.2009, 15:59
file.import.data = DB:pages:2:media


не имеет смысла в таком контексте

GAZok
16.07.2009, 16:36
у вас ошибка ...

...и лучше использовать ....

...Будьте внимательны.
пробовал разные варианты и в том числе те, которые вы указываете, не получалось

но это все натолкнуло меня на некоторые мысли в результате которых мне удалось реализовать изначальную задачу:
Вывести на одной странице картинки нескольких других страниц. Причем они должны были быть ссылками на эти страницы. Этого я не указывал в задании дабы не усложнять

Возможно можно было реализовать и другим методом, но данная реализация вполне устраивает:
lib.rotator_images=HMENU
lib.rotator_images.special=list
lib.rotator_images.special.value = 154,155,157,156
lib.rotator_images.1=TMENU
# set expAll to 1 if the menu should be expandet by default
lib.rotator_images.1.expAll=0
lib.rotator_images.1.wrap=<div class="picwrapper" style="overflow: hidden; width: 284px; height: 140px;">|</div>
lib.rotator_images.1.NO{
# fill the used registers
before.cObject=LOAD_REGISTER
before.cObject{
# Counter for the mainmenu points
mainMenuNumber.cObject=TEXT
mainMenuNumber.cObject{
value={register:mainMenuNumber}+1
insertData=1
}
mainMenuNumber.prioriCalc=intval

mainMenuImage.cObject = IMAGE
mainMenuImage.cObject.file {
import.field = media
import = uploads/media/
import.listNum = 1
}

}

ATagParams = class="pic_{register:mainMenuNumber}"
ATagBeforeWrap=1
linkWrap=<!-- | -->{register:mainMenuImage}
allStdWrap.insertData=1

}


то есть получаем примерно такой исходящий код:
<div class="picwrapper" style="overflow: hidden; width: 284px; height: 140px;">
<a href="page1.html" onfocus="blurLink(this);" class="pic_1"><!-- ICT --><img src="uploads/media/image1.jpg" width="705" height="200" border="0" alt="" title="" /></a>
<a href="page2.html" onfocus="blurLink(this);" class="pic_2"><!-- Automotive --><img src="uploads/media/image2.jpg" width="705" height="200" border="0" alt="" title="" /></a>
<a href="page3.html" onfocus="blurLink(this);" class="pic_3"><!-- Insurance --><img src="uploads/media/image3.jpg" width="705" height="200" border="0" alt="" title="" /></a>
<a href="page4.html" onfocus="blurLink(this);" class="pic_4"><!-- Health Care --><img src="uploads/media/image4.jpg" width="705" height="200" border="0" alt="" title="" /></a>
</div>



Сергей, вам огромное спасибо за помощь и оперативные ответы!