Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   Дополнительные поля для текстовых страниц (http://forum.typo3.ru/showthread.php?t=5767)

Pash 17.01.2008 15:06

Дополнительные поля для текстовых страниц
 
Добрый день!

Вопрос такой. Сделал сайт для тур фирмы, они вводят информацию о турах в виде обычных текстовых страниц. Теперь хотят ввести поиск по турам, по следующим критериям:
  • направление
  • цена (от - до)
  • примерная дата (от - до)
Ну, и вопрос: как это реализовать?
У меня в голове есть два потенциальных решения:
  1. Используя экстеншн для бекенда, добавить новые поля к страницам, чтобы для туров можно было вводить значения этих критериев
  2. Как-то конвертировать существующую систему ввода туров либо на tt_products либо еще на подобный механизм, который имеет встроенные средства поиска
Пока также непонятно, что делать во фронт-енде, как присобачить форму поиска.

Есть еще вариант - сделать обычный индексированный поиск и не париться, вот только в таком варианте - как сделать, чтобы не выбирались "левые" страницы вроде "о нас", а именно только туры?

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

Grank 25.01.2008 20:45

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

Pash 26.01.2008 01:04

Спасибо, Grank.

Да, действительно, индексированный поиск использовать не удалось.
Зато помогло расширение pageflexform, которое позволяет для страницы добавить дополнительные поля (в моем случае это были поля "is_tour", "дата с", "дата по", "цена", "страна"), и задавать значения этих полей для определенного типа записей. Хранится это все в дополнительном поле таблицы pages, а из фронтенда поиск был чисто кастомным кодом (страница с содержанием типа "PHP script").

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

Спасибо за отклик!

stoun 15.11.2008 17:02

@Pash

Мне пришлось столкнуться с точно такой же проблемой - нужно дабавить несолько дополнительных полей к странице.

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

И может быть ты знаешь, как заставить это поле понимать HTML?
Мне нужно, чтобы в тексте можно было ввести <br />.
Сейчас в FE это выводится как <br />, перенос строки не происходит

А также, можно ли использовать другой тип для этого поля, например textarea.

Заранее спасибо за подсказку!

Pash 16.11.2008 03:08

@stoun

pageflexform настраивается в файле \typo3conf\ext\pageflexform\flexform_ds.xml

Например, у меня в этом файле такие записи:

Код:

<T3DataStructure>
        <meta>
        </meta>
        <sheets>
        <sDEF>
        <ROOT>
                <TCEforms>
                        <sheetTitle>LLL:EXT:pageflexform/locallang_tca.php:pageflexform.default.title</sheetTitle>
                </TCEforms>
                <type>array</type>
                <el>
                        <tourInput>
                                <TCEforms>
                                <label>LLL:EXT:pageflexform/locallang_tca.php:pageflexform.tour.input</label>
                                <config>
                                        <type>input</type>
                                        <size>20</size>
                                </config>
                                </TCEforms>
                        </tourInput>
                        <countryInput>
                                <TCEforms>
                                <label>LLL:EXT:pageflexform/locallang_tca.php:pageflexform.country.input</label>
                                <config>
                                        <type>input</type>
                                        <size>20</size>
                                </config>
                                </TCEforms>
                        </countryInput>
                        <date_fromInput>
                                <TCEforms>
                                <label>LLL:EXT:pageflexform/locallang_tca.php:pageflexform.date_from.input</label>
                                <config>

                                        <type>input</type>
                                        <size>20</size>
                                </config>
                                </TCEforms>
                        </date_fromInput>
                        <date_toInput>
                                <TCEforms>
                                <label>LLL:EXT:pageflexform/locallang_tca.php:pageflexform.date_to.input</label>
                                <config>
                                        <type>input</type>
                                        <size>20</size>
                                </config>
                                </TCEforms>
                        </date_toInput>
                        <priceInput>
                                <TCEforms>
                                <label>LLL:EXT:pageflexform/locallang_tca.php:pageflexform.price.input</label>
                                <config>
                                        <type>input</type>
                                        <size>20</size>
                                </config>
                                </TCEforms>
                        </priceInput>
                </el>
        </ROOT>
        </sDEF>
</sheets>
</T3DataStructure>

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

Другой тип поля, полагаю, использовать можно. Для этого нужно изменить экстеншн, заменив поле в темплейте. Где, что и как конкретно -- нужно смотреть, сходу не отвечу.

По поводу <br /> в коде -- можно не делать htmlspecialchars, однако это не всегда безопасно, да и, думаю, хлопотно это будет. Проще либо какой-то признак конца строки сделать (типа сочетакние "%%%" означает перенос на новую строку), либо использовать textarea.

Так что все возможно, все реально. Успехов! Привет!


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

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