Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   FAQ (Часто задаваемые вопросы) (http://forum.typo3.ru/forumdisplay.php?f=26)
-   -   Как показывать один элемент на всех страницах? (http://forum.typo3.ru/showthread.php?t=354)

Антон Мельников 19.05.2003 19:05

Как показывать один элемент на всех страницах?
 
В боковой колонке нужно показывать несколько абзацев на всех страницах сайта (спецпредложения, новости). Как сделать так, чтобы ими мог управлять пользователь, неграмотный в typoScript/html? Как сделать то же самое для группы страниц (спецпредложения по гвоздям показывать в разделе "гвозди")?

Andreas Schwarzkopf 19.05.2003 20:04

Есть несколько путей:
1. плагин Новости (описание ниже)
2. вставка записи непосредств. из базы данных:
2 a) - одна запись
page.10 = TEXT
page.10.data = DB : tt_content:234:header
- вставляет запись номер 234 из таблицы tt_content, столбец: header
(информация: TSref, разделы stdWrap и getText)
2 b) - несколько записей
page.10 = RECORDS
page.10.tables = tt_content
page.10.source = 34,45 //номера записей
(информация: TSref, раздел RECORDS

3. целые страницы:
Обычный CONTENT объект, как он используется в статическом шаблоне content(default): Веб-Шаблон-Template Analyser-StylesContentDefault:

page.10 = CONTENT
page.10 {
table = tt_content
select.orderBy = sorting
select.where = colPos=0
select.languageField = sys_language_uid
# это добавлено мной:
select.pidInList = 234 // номер страницы
# или
select.uidInList = 34,23,34 // номера записей
}

НОВОСТИ: наиболее универсальный и элегантный метод.

пример:
temp.newsLeft = COA
temp.newsLeft < plugin.tt_news
temp.newsLeft {
defaultCode = LIST
code >
code = LATEST/1 // это номер категории новостей
pid_list >
pid_list = 58 // номер страницы, где лежат новости
}

# теперь вставляем шаблон:
page.10 < temp.newsLeft

# или при работе с HTML-шаблоном:
subparts.NEWS < temp.newsLeft

Н какой-либо странице, где необходимо показывать новости другой категории, или указать другое место хранения, нужно создать дополняющий шаблон, который состоит только из одной или двух строк:
page.10.code = LATEST/2
или
page.10.pid_list = 453

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

Да, и еще: если вы хотите включить RTE в новостях, скачайте новое расширение News+.

Успехов

Антон Мельников 19.05.2003 22:03

> select.pidInList = 234 // номер страницы
> select.uidInList = 34,23,34 // номера записей

А можно ли ссылаться на элемент или страницу не по номеру?

А с новостями буду разбираться..

Andreas Schwarzkopf 19.05.2003 22:18

uidInList - только номера
pidInList - номера + все, что дает функция stdWrap:
.data
.field
и.т.д
пример:
select.pidInList.data = leveluid : 1
- выбрать номер страницы первого уровня (под корневой страницей)

Valery Romanchev 01.01.2007 17:42

сейчас сюда надо добавить KB TV Content Slide kb_tv_cont_slide
и соответсвующую фичу ядра для старого page модуля

Ice 17.01.2007 09:37

окно поиска
 
Не получается вставить форму поиска в HTML-шаблон:

temp.searchbox = CONTENT
temp.searchbox {
table = tt_content
select.uidInList = 96 // номер записи
}

и далее
subparts.searchbox < temp.searchbox

pidInList тоже не даёт эффекта :(

HTML-код <!--###searchbox### begin-->форма поиска<!--###searchbox### end--> просто удаляется

PhilD 17.01.2007 09:59

сделайте через RECORDS

Ice 17.01.2007 10:07

тот же эффект
 
тот же эффект:

temp.searchbox = RECORDS
temp.searchbox {
tables = tt_content
source = 96 // номер записи
}

Ice 17.01.2007 10:17

без шаблонов тоже не работает
 
Даже если я создаю новую страницу и ввожу:

# Default PAGE object:
page = PAGE
page.10 = RECORDS
page.10.source = tt_content_96

то получаю пустую страницу

Ice 17.01.2007 12:16

попробовал отладить:
temp.searchbox = CONTENT
temp.searchbox {
select.pidInList = 120
table = tt_content
renderObj=COA
renderObj{
20=TEXT
20.data = debug:data
}
}

если указываю страницу pidInList = 120, то форма поиска не выводится, но выводится запись из БД, если указываю элемент на этой странице uidInList = 96, то и запись БД не выводится

Выходит, что нельзя использовать uidInList?

Ice 17.01.2007 16:17

Вопрос снят.

Конечный работающий код следующий:
temp.searchbox = RECORDS
temp.searchbox.source = 96
temp.searchbox.tables = tt_content

enot 01.02.2007 01:28

А как показывать одну, случайным образом выбранную, запись из таблицы с помощью RECORDS?

Ice 01.02.2007 08:08

Цитата:

Сообщение от enot (Сообщение 9556)
А как показывать одну, случайным образом выбранную, запись из таблицы с помощью RECORDS?

1 случайный элемент со страницы с помощью CONTENT:
Код:

  10 = CONTENT
  10 {
    table = tt_content
    select {
      # ID of the page where your content elements are stored
      pidInList = 126
      # Number of content elements to show
      max = 1
      orderBy = rand()
    }
  }


hangmoon 29.04.2008 01:58

помогите по теме:
хочу вставить в хтмл шаблон мини новости, пишу так
...
subparts.right = TEXT
subparts.right < plugin.tx_mininews_pi1
...
все работает, только новости отображаются на главной странице, где они и находяться, а на других страницах показывается только строка search 0 из 0 , как сделать, чтобы новости брались с 1ой страницы?

Falcon 25.11.2008 19:04

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

reva2 26.11.2008 00:35

Под "полем akcii" Вы имеете ввиду поле в шаблоне TemplaVoila? Если так, то возможны два варианта:
1) указываете "Typoscript object path" в качестве значения edeting type вашего поля и прописываете в object path что-то типа "lib.myAkcii" (без кавычек). Затем в TS шаблоне страницы задаете объект lib.myAkcii примерно так:
Цитата:

lib.myAkcii < tt_news
lib.myAkcii {
code >
code = SINGLE
..................
}
2) Ставите расширение kb_tv_cont_slide. В качестве значения edeting type указываете Content Elements. Сохраняете Ваш TemplaVoila шаблон. Затем редактируете DS (Data Structure) Вашего шаблона в соотвествии с документацией расширения kb_tv_cont_slide. И после этого на всего страницах более низкого уровня автоматом будет показываться контент из этого поля родительской страницы.

Falcon 26.11.2008 23:06

Спасибо, а что значит нет идентификатора новости ?
pid указан правильно...

эм, а pid равен UID ?если нет, то подскажите как его найти(pid)?

reva2 27.11.2008 12:09

PID это id страницы на которой хранятся записи (в вашем случае я так понимаю это новости).
а идентификатор новости - это уже непосредственно uid новости которую вы хотите показать.

Falcon 07.12.2008 23:10

Спасибо огромное) помогло...

а есть какойнибуть способ в последние новости загрузить картинку??
просто нужно чтобы при нажатии на эту картинку осуществлялся переход на некую страницу.. как в новостях. и главне нужно чтобы это легко редактировалось

dmartynenko 08.12.2008 15:05

Цитата:

Сообщение от Falcon (Сообщение 22922)
Спасибо огромное) помогло...

а есть какойнибуть способ в последние новости загрузить картинку??
просто нужно чтобы при нажатии на эту картинку осуществлялся переход на некую страницу.. как в новостях. и главне нужно чтобы это легко редактировалось

Длятаких вопросов создавайте новую тему! Ведь к текущей ветке она уже не имеет отношения.

А вот вариант решения:
1. Вывести 2 списка LATEST - в первом одна новость + картинка (из этой новости), во втором остальные новости.
2. Вывести два контент-элемента - один список новостей, второй просто картинка зевернутая в div. С помощью CSS спозиционировать их между собой как нужно.

Falcon 09.12.2008 07:24

По моему всё, по теме.. ибо мне и нужно разместить один элемент на всех страницах, просто я решил что новостью это будет всех удобнее для заказчика..
Спасибо за ответ.

khurtsiya 03.07.2011 16:31

нашел код

Цитата:

temp.kievtemplate = RECORDS
temp.kievtemplate {
tables = tt_content
source = 254 # Enter the object's ID here
}
но не понял куда его вставлять и как определить в каком месте будет выведен контент? нужно в левой колонке

anweb 14.12.2011 16:10

Можно ли вывести содержимое поля из таблицы своего расширения? Вот так не работает:

Код:

lib.my_lib = CONTENT
lib.my_lib.table = tx_my_ext_table
lib.my_lib.select {
    pidInList = 9
    selectFields = count(*) as my_row
    where = NOT deleted AND NOT hidden
    andWhere = tx_my_ext_table.my_second_row=1
    groupBy = tstamp
}

В TSref вот что для table указано: Note: Allowed tables are "pages" or tables prefixed with one of these: "pages_", "tt_", "tx_", "ttx_", "fe_", "user_" or "static_".

Вроде как получается таблицы с префиксом "tx_" разрешены. Или может есть другой способ?

dmartynenko 14.12.2011 16:16

Можно! Ваш код корректный, но не полный - для CONTENT нужно указать как вывести загруженные данные. Иначе что вы ожидаете увидеть?

Читайте TSref CONTENT.renderObj и ищите примеры здесь или в гугле.

anweb 14.12.2011 17:08

Спасибо большое за подсказку, вот теперь работает:

Код:

lib.my_lib = CONTENT
lib.my_lib.table = tx_my_ext_table
lib.my_lib.select {
    pidInList = 9
    selectFields = my_row
    where = NOT deleted AND NOT hidden
    andWhere = my_second_row=1
    orderBy = tstamp
    limit = 1
}
lib.my_lib.renderObj = COA
lib.my_lib.renderObj {
    10 = TEXT
    10.field = my_row
}

Вот только limit=1 не работает, или здесь надо по другому как-то для вывода только одной записи, самой новой?

dmartynenko 14.12.2011 17:19

Это вам не SQL:
Код:

# limit 10 entries
lib.my_lib.select.max=10


dmartynenko 14.12.2011 17:19

И еще несколько хороших примеров: http://www.typo3wizard.com/en/articl...nt-object.html

anweb 14.12.2011 17:32

Еще раз спасибо большое за очередную подсказку и ссылку! Знаю этот сайт, но как-то давно уже не заходил) Там на самом деле очень много замечательных примеров. А мой lib теперь уже полностью работает:

Код:

lib.my_lib = CONTENT
lib.my_lib.table = tx_my_ext_table
lib.my_lib.select {
    pidInList = 9
    selectFields = my_row
    where = NOT deleted AND NOT hidden
    andWhere = my_second_row=1
    orderBy = tstamp DESC
    max = 1
}
lib.my_lib.renderObj = COA
lib.my_lib.renderObj {
    10 = TEXT
    10.field = my_row
}


Dmitry Dulepov 19.12.2011 14:34

А зачем вам это делать через элемент? Просто в HTML-шаблон забейте и все.

dmartynenko 19.12.2011 14:37

Цитата:

Сообщение от Dmitry Dulepov (Сообщение 32682)
А зачем вам это делать через элемент? Просто в HTML-шаблон забейте и все.

Наверняка этот элемент должен редактироваться BE-пользователем без прав админа и без доступа к шаблонам.

anweb 19.12.2011 14:54

Даже не знаю, мне кажется так вроде удобнее) Я этот lib к FCE прикручиваю, а потом редактор может в любое место сайта его вставить.

anweb 19.12.2011 14:55

Цитата:

Сообщение от dmartynenko (Сообщение 32683)
Наверняка этот элемент должен редактироваться BE-пользователем без прав админа и без доступа к шаблонам.

Совершенно верно

Андрей Аксенов 21.12.2011 18:59

Реализовано в templavoila_framework.
Суть такая, часть шаблона отводится для вывода содержимого из специально указанной для этого папки (через TS константу указываем PID папки с элементами содержимого - появляется возможность менять ее для разных частей сайта).
В папку складываем элементы содержимого, которые нужно вставить в эту определенную часть шаблона. Сам шаблон - структура данных в темплавуаля... Часть описания поля в структуре данных страницы выглядит так:
Код:

                        <field_generated_content_1 type="array">
                                <tx_templavoila type="array">
                                        <title>Формируемое содержимое 1</title>
                                        <description>Автоматически формируемое для страниц содержимое</description>
                                        <sample_data type="array">
                                                <numIndex index="0"></numIndex>
                                        </sample_data>
                                        <eType>none</eType>
                                        <tags>div:outer</tags>
                                        <TypoScript_constants type="array">
                                                <containerWidth>{$containerWidth.f1f.generatedContent-1}</containerWidth>
                                                <contentSource>{$dsConfig.generatedContent-1.contentSource}</contentSource>
                                        </TypoScript_constants>
                                        <TypoScript><![CDATA[

...
10 = CONTENT
10 {
        wrap = <div id="generatedContent-1">|</div><!-- end #generatedContent-1  -->
        table = tt_content
        select.pidInList = {$contentSource}
        select.languageField = sys_language_uid
}

                                        ]]></TypoScript>
                                        <oldStyleColumnNumber type="integer">0</oldStyleColumnNumber>
                                </tx_templavoila>
                        </field_generated_content_1>

Важно здесь: contentSource - это и есть константа PID для папки.
ну а <oldStyleColumnNumber type="integer">0</oldStyleColumnNumber> - это номер столбца из которого будут браться элементы содержимого, при использовании обычных шаблонов.


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

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