Просмотр полной версии : Свой PHP-код на TYPO3
Всем привет!
Ситуация такая: есть отдельно созданная таблица в базе данных сайта на TYPO3. Нужно выводить содержимое на страницы сайта. \вопрос как это сделать?
Мои соображения:
в директории fileadmin создать папку. в нее сложить скрипты обработчики таблицы. создать новый материал (чистый хтмл). проинклудить(?) файлы ПХП. получить результат.
Схему эту не пробовал. в TYPO новичок. Наверняка придется что-то писать в TS, или даже создавать отдельный шаблон для этой (этих) страниц. Вот тут и начинаются пляски с бубном. что делать, подскажите!
Андрей Аксенов
26.04.2011, 09:53
Тебе нужно вот это (http://www.typo3-tesseract.com/ru/), там же документация на русском.
Андрей, зачем человеку такие сложности для вывода записей из одной таблицы?
Heken самый простой вариант это подключить ваш скрипт через TypoScript (см. эту документацию (http://typo3.org/documentation/document-library/core-documentation/doc_core_tsref/4.4.0/view/1/7/#id2640097)).
Андрей Аксенов
26.04.2011, 23:25
ну можно и так... кстати перевод этого документа тоже здесь есть (http://forum.typo3.biz/showthread.php?t=9092)... Его версия для TYPO3 4.5 появится примерно через месяц, ну а перевод, как переведу...
Можно посмотреть еще и это (http://forum.typo3.biz/showthread.php?t=9235), хоть и старое руководство, но основы те же.
Ну а что касается сложностей, которые я посоветовал, то там все как раз очень просто... Запрос к базе данных, шаблон на чем угодно, том же PHP, ну и все увязать в диспетчере - и все выведено!
Тут уж кому что проще, не угадаешь.
Спасибо! нужно старое руководство (v.4.1.3)
аналогичная ситуация. нельзя ли простенький пример, как с помощью php-скрипта получить значение поля uid к примеру из таблицы page? как к базе приконнектиться? как читать данные из ее таблиц?
Андрей Аксенов
17.05.2011, 22:08
Если с помощью php-сценария - то это к руководству по php. А если посредством typoscript, то нужно читать справочник Tref, перевод последней версии которого надеюсь закончить за неделю. Пример прям оттуда:
page.60 = CONTENT
page.60 {
table = tt_content
select {
pidInList = 73
where = header != ###whatever###
orderBy = ###sortfield###
markers {
whatever.data = GP:first
sortfield.value = sor
sortfield.wrap = |ting
}
}
}
как-то так
Сорри, но тот TREF, что у меня мало чем может помочь. Как можно понять вот это: orderBy SQL-orderBy Без "order by"! Например, "sorting, title"? А уж как это все использовать - вообще нигде не нашел (я не про справочник). Поэтому и спрашивал, как из PHP скрипта подцепиться к базе данных Typo3 и выбрать оттуда какие-нибудь данные?
И опять-же - согласно TREF, CONTENT служит для получения данных из tt_content, а мне надо из pages.
Андрей Аксенов
18.05.2011, 13:11
Ну переписывать всем TSref не имеет смысла, тем более ссылки на него и перевод имеются выше. Новая версия (пока английская) имеется в репозитории TYPO3 - появилась позавчера.
Выше привел пример доступа к данным в полях таблицы из TypoScrypt.
Если не ясно что-то с TypoScrypt, то и здесь доступен официальный русский перевод (ключ расширения doc_tut_ts45_ru).
Понимаю, что TYPO3 изучить непросто, для этого и стараюсь делать перевод документации.
Стремление обучиться тоже похвально, но каждому заново повторять одно и то же - читайте документацию, там все есть...
нет, там далеко не все есть. если уж мы говорим про TypoScript, скажите мне, где в документации (TREF, Typo3 by examples, FTB) написано, как в TypoScript получить значение ID текущей страницы?
tt_pages = COA
tt_pages.wrap = |<HR>
tt_pages.10 = TEXT
tt_pages.10.field = author
tt_pages.10.wrap = | <BR>
tt_pages.20 = TEXT
tt_pages.20.field = SYS_LASTCHANGED
lib.field_author = RECORDS
lib.field_author.source = ??? здесь должен быть ID страницы, в данный момент выведенной на экран
lib.field_author.tables = pages
lib.field_author.conf.pages < tt_pages
и все равно - это лишь частная задача.
главный вопрос остался без ответа: как из подключенного пхп скрипта подключиться к базе данных Typo3 и прочитать оттуда нужные записи??? То есть, как сделать тоже самое, но из пхп?
Андрей Аксенов
18.05.2011, 14:35
где в документации (TREF, Typo3 by examples, FTB) написано, как в TypoScript получить значение ID текущей страницы?
не буду спорить... открываем TSref здесь (http://typo3.org/documentation/document-library/core-documentation/doc_core_tsref/4.5.0/view/1/2/#id2313303), ищем page_id:
A page id (int) or "this" (=current page id)
как из подключенного пхп скрипта подключиться к базе данных Typo3 и прочитать оттуда нужные записи??? То есть, как сделать тоже самое, но из пхп?
Ответ ищем в расширениях, но вообще понадобиться документ doc_core_api, которые также переведен. Там ищем "t3lib_DB" и находим:
Функции: $GLOBALS['TYPO3_DB']->
exec_INSERTquery
exec_UPDATEquery
exec_DELETEquery
exec_SELECTquery
API доступа к базе данных.
Для совместимости с Database Abstraction Layers, для доступа к базе данных всегда необходимо использовать глобальный объект $TYPO3_DB. Класс "t3lib_db" содержит список функций оберток MySQL (sql(), sql_fetch_assoc(), и т.п.), которые могут использоваться почти как есть. Просто воспользуйтесь поиском/заменой.
Но рекомендуется перенести свое приложение для непосредственного использования четырех выполняемых функций. Это позволяет одновременно построить запрос и выполнит его.
Обратитесь к документации руководства по программированию, t3lib_db API и Inside TYPO3 за дополнительной информацией.
Вставка записи:
Просто внесите в массив пары "поле => значение" и передайте в функцию exec_INSERTquery() вместе с названием таблицы, в которую все это должно быть вставлено:
$insertFields = array(
'md5hash' => $md5,
'tstamp' => time(),
'type' => 2,
'params' => $inUrl
);
$GLOBALS['TYPO3_DB']->exec_INSERTquery(
'cache_md5params',
$insertFields
);
Обновление записи:
Перед вызовом exec_UPDATEquery(), создайте массив пар "поле => значение". Вызов функции происходит почти как при вставке, но необходимо добавить условие WHERE для обновления необходимых записей. Это второй назначаемый аргумент, вроде значения "uid=???".
$fields_values = array(
'title' => $data['sys_todos'][$key]['title'],
'deadline' => $data['sys_todos'][$key]['deadline'],
'description' => $data['sys_todos'][$key]['description'],
'tstamp' => time()
);
$GLOBALS['TYPO3_DB']->exec_UPDATEquery(
'sys_todos',
'uid=' . intval($key),
$fields_values
);
Удаление записи:
Вызовите exec_DELETEquery() с названием таблицы и условием выбора WHERE для удаляемых записей:
$GLOBALS['TYPO3_DB']->exec_DELETEquery(
'sys_todos',
'uid=' . intval($key)
);
Выбор записи:
Вызовите exec_SELECTquery() с, по крайней мере тремя первыми аргументами (список выбираемых полей, названием таблицы и условием WHERE). Возвращаемое значение — результирующий указатель (или объект), который должен быть передан в ->sql_fetch_assoc(), циклично, по порядку результирующих рядов.
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'*',
$theTable,
$theField . '="' .
$GLOBALS['TYPO3_DB']->quoteStr($theValue, $theTable) . '"' .
$this->deleteClause($theTable) . ' ' .
$whereClause,
$groupBy,
$orderBy,
$limit
);
$rows = array();
while(($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))) {
$rows[] = $row;
}
$GLOBALS['TYPO3_DB']->sql_free_result($res);
if (count($rows)) return $rows;
нет, в данном случае page_id не работает. в качестве source я должен указать текущую страницу, вернее ее id. казалось бы, page_id = this - самое то, ан нет... так что мне вставить в мой код?
Андрей Аксенов
18.05.2011, 15:01
я так и не понял, а что этот код должен делать?
этот - читать из pages поле author для текущей страницы
Андрей Аксенов
18.05.2011, 15:55
а что вообще нужно сделать? Зачем это поле-то читать? Потом же что-то с этим надо сделать... А приведенный выше код вообще черт знает что делает...
# Автор страницы в заголовке
1 = COA
1 {
wrap = <title> | </title>
1 = TEXT
1.data = TSFE:page|author
1.htmlSpecialChars = 1
}
Вот так, например, можно автора, если он есть, поставить в заголовок страницы...
По аналогии - куда угодно, и все это имеется в TSref!
а что вообще нужно сделать? Зачем это поле-то читать? Потом же что-то с этим надо сделать... А приведенный выше код вообще черт знает что делает...
# Автор страницы в заголовке
1.data = TSFE:page|author
Вот так, например, можно автора, если он есть, поставить в заголовок страницы...
По аналогии - куда угодно, и все это имеется в TSref!
Вот это ты где взял? Где написано, что есть такая переменная author или свойство, что я могу ее/его вот так через | применить?
А код, кстати, из Typo3 by example.
Так что не все можно найти в документации и не все, что там найдено, работает правильно. Поэтому, большая просьба, если уж кто-то здесь и спрашивает что-то, то уж. наверняка, после того, как попытался найти ответ на свой вопрос в так называемой документации. и не надо его туда опять отсылать. С точки зрения психологии объяснить все моменты?
и опять же, мне надо еще и дату последнего изменения страницы SYS_LASTCHANGED показывать, кроме ее автора. как мне до нее добраться, как из UNIX-времени ее перевести в нормальное? и еще херова туча вопросов, ответов на которые в документации нет. их можно было бы получить здесь, если бы и здесь не посылали... в документацию.
За код - спасибо. Просто и работает. Если я правильно понимаю, через TFSE:page мы получаем доступ ко всем атрибутам текущей страницы?
и все-равно с пхп было бы проще (и привычнее). потому что через поле author в pages надо вытаскивать для каждого автора его контакты да и время, как я уже говорил, надо как-то переводить... поэтому буду зрить в core.
Андрей Аксенов
18.05.2011, 17:41
Зря так, в документации действительно все есть, хотя примеров маловато, да и трудно разобраться. Документацию официальную я сам перевожу и примеры в ней стараются давать правильные.
А код этот я сам написал, только что...
Можно еще так вывести текст где-нибудь:
10 = TEXT
10.value = Автор страницы: {page:author}
10.insertData = 1
PHP оно конечно сначала привычнее, но здесь трудно учесть все ньюансы, типа разрешен ли доступ у этого пользователя к тому, что нужно вывести, не удалено ли это было и куча всего.
Как раз API TYPO3 для этого и нужно.
аха, вот про это-то я и не подумал. хотя для данного случая это не критично, если уж страница на сайте есть - то выдайте ее автора и время последнего изменения.
Итак, выводим автора страницы* и дату последнего изменения с помощью PHP через запись текущей страницы в $GLOBALS["TSFE"]:
$author = $GLOBALS["TSFE"]->page[author]; //author - поле "author" таблицы "pages"
$author_mail = $GLOBALS["TSFE"]->page[author_email]; //author_email - поле "author_email" таблицы "pages"
if($author)
{
echo "<p class='page_info'>"."Author:"."<br>";
echo "<span class='author'>".$author."</span><br>";
echo "E-Mail: <span class='author_mail'>".$author_mail."</span></p>";
$last_change = $GLOBALS["TSFE"]->page[SYS_LASTCHANGED]; //SYS_LASTCHANGED - поле "SYS_LASTCHANGED" таблицы "pages"
$last_change_formated = date("d.m.Y", $last_change);
echo "<p>"."Last change"."<br>";
echo "<span class='last_change'>".$last_change_formated."</span></p>";
}
и еще раз - на бис, но с получением данных из таблицы базы данных Typo3 (только автора, остальное - по аналогии):
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'uid,author', //выбираем поля uid и author
'pages', //из таблицы pages
'uid='.$GLOBALS["TSFE"]->id, //условие: только для текущей страницы
'',
'',
''
);
$rows = array();
while(($rows = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))) {
//$rows[] = $row;
$author = $rows[author];
}
$GLOBALS['TYPO3_DB']->sql_free_result($res);
//if (count($rows)) return $rows;
echo "<b>".$author."</b>";
*автора для каждой страницы при ее создании/редактировании автоматом добавляет это (http://typo3.org/extensions/repository/view/fhm_author/current/) расширение в поле author и author_email таблицы pages
Работает на vBulletin® версия 3.8.1. Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot