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

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

Ответ
 
Опции темы Опции просмотра
Старый 18.05.2011, 14:35   #11
Андрей Аксенов
Senior Member
 
Регистрация: 12.04.2008
Адрес: Россия, Москва
Сообщений: 706
Отправить сообщение для Андрей Аксенов с помощью ICQ Отправить сообщение для Андрей Аксенов с помощью Skype™
По умолчанию

Цитата:
Сообщение от Anlov Посмотреть сообщение
где в документации (TREF, Typo3 by examples, FTB) написано, как в TypoScript получить значение ID текущей страницы?
не буду спорить... открываем TSref здесь, ищем page_id:
Цитата:
A page id (int) or "this" (=current page id)
Цитата:
Сообщение от Anlov Посмотреть сообщение
как из подключенного пхп скрипта подключиться к базе данных 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;
Андрей Аксенов вне форума   Ответить с цитированием
Старый 18.05.2011, 14:56   #12
Anlov
Senior Member
 
Регистрация: 02.05.2011
Сообщений: 138
По умолчанию

нет, в данном случае page_id не работает. в качестве source я должен указать текущую страницу, вернее ее id. казалось бы, page_id = this - самое то, ан нет... так что мне вставить в мой код?
Anlov вне форума   Ответить с цитированием
Старый 18.05.2011, 15:01   #13
Андрей Аксенов
Senior Member
 
Регистрация: 12.04.2008
Адрес: Россия, Москва
Сообщений: 706
Отправить сообщение для Андрей Аксенов с помощью ICQ Отправить сообщение для Андрей Аксенов с помощью Skype™
По умолчанию

я так и не понял, а что этот код должен делать?
Андрей Аксенов вне форума   Ответить с цитированием
Старый 18.05.2011, 15:04   #14
Anlov
Senior Member
 
Регистрация: 02.05.2011
Сообщений: 138
По умолчанию

этот - читать из pages поле author для текущей страницы
Anlov вне форума   Ответить с цитированием
Старый 18.05.2011, 15:55   #15
Андрей Аксенов
Senior Member
 
Регистрация: 12.04.2008
Адрес: Россия, Москва
Сообщений: 706
Отправить сообщение для Андрей Аксенов с помощью ICQ Отправить сообщение для Андрей Аксенов с помощью Skype™
По умолчанию

а что вообще нужно сделать? Зачем это поле-то читать? Потом же что-то с этим надо сделать... А приведенный выше код вообще черт знает что делает...
PHP код:
# Автор страницы в заголовке
COA
{
    
wrap = <title> | </title>

    
TEXT
    1.data 
TSFE:page|author
    1.htmlSpecialChars 
1

Вот так, например, можно автора, если он есть, поставить в заголовок страницы...
По аналогии - куда угодно, и все это имеется в TSref!
Андрей Аксенов вне форума   Ответить с цитированием
Старый 18.05.2011, 16:27   #16
Anlov
Senior Member
 
Регистрация: 02.05.2011
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Андрей Аксенов Посмотреть сообщение
а что вообще нужно сделать? Зачем это поле-то читать? Потом же что-то с этим надо сделать... А приведенный выше код вообще черт знает что делает...
PHP код:
# Автор страницы в заголовке

    
1.data TSFE:page|author 
Вот так, например, можно автора, если он есть, поставить в заголовок страницы...
По аналогии - куда угодно, и все это имеется в TSref!
Вот это ты где взял? Где написано, что есть такая переменная author или свойство, что я могу ее/его вот так через | применить?

А код, кстати, из Typo3 by example.

Так что не все можно найти в документации и не все, что там найдено, работает правильно. Поэтому, большая просьба, если уж кто-то здесь и спрашивает что-то, то уж. наверняка, после того, как попытался найти ответ на свой вопрос в так называемой документации. и не надо его туда опять отсылать. С точки зрения психологии объяснить все моменты?

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

За код - спасибо. Просто и работает. Если я правильно понимаю, через
Код:
TFSE:page
мы получаем доступ ко всем атрибутам текущей страницы?

и все-равно с пхп было бы проще (и привычнее). потому что через поле author в pages надо вытаскивать для каждого автора его контакты да и время, как я уже говорил, надо как-то переводить... поэтому буду зрить в core.

Последний раз редактировалось Anlov; 18.05.2011 в 16:41
Anlov вне форума   Ответить с цитированием
Старый 18.05.2011, 17:41   #17
Андрей Аксенов
Senior Member
 
Регистрация: 12.04.2008
Адрес: Россия, Москва
Сообщений: 706
Отправить сообщение для Андрей Аксенов с помощью ICQ Отправить сообщение для Андрей Аксенов с помощью Skype™
По умолчанию

Зря так, в документации действительно все есть, хотя примеров маловато, да и трудно разобраться. Документацию официальную я сам перевожу и примеры в ней стараются давать правильные.
А код этот я сам написал, только что...
Можно еще так вывести текст где-нибудь:
PHP код:
10 TEXT
10.value 
Автор страницы: {page:author}
10.insertData 
PHP оно конечно сначала привычнее, но здесь трудно учесть все ньюансы, типа разрешен ли доступ у этого пользователя к тому, что нужно вывести, не удалено ли это было и куча всего.
Как раз API TYPO3 для этого и нужно.
Андрей Аксенов вне форума   Ответить с цитированием
Старый 18.05.2011, 18:55   #18
Anlov
Senior Member
 
Регистрация: 02.05.2011
Сообщений: 138
По умолчанию

аха, вот про это-то я и не подумал. хотя для данного случая это не критично, если уж страница на сайте есть - то выдайте ее автора и время последнего изменения.
Anlov вне форума   Ответить с цитированием
Старый 18.05.2011, 19:47   #19
Anlov
Senior Member
 
Регистрация: 02.05.2011
Сообщений: 138
По умолчанию

Итак, выводим автора страницы* и дату последнего изменения с помощью 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>";
*автора для каждой страницы при ее создании/редактировании автоматом добавляет это расширение в поле author и author_email таблицы pages
Anlov вне форума   Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инструкция: установка php акселератора APC на хостинге nic.ru Valery Romanchev TYPO3 хостинг 24 25.11.2014 16:47
Настройки параметров ImageMagick для TYPO3 на FreeBSD и Linux Valery Romanchev Мастер-класс 9 25.06.2013 22:38
Как вставить php код в шаблон сайта на typo3 givemesomedrugs Общие вопросы 3 11.11.2010 18:40
Как вставить PHP код до всякого TYPO3 кода.. Или почти до Valery Romanchev Разработка расширений / TYPO3 extension development 1 30.07.2005 17:15
TYPO3, PHP разработчик в Москве (full time) Valery Romanchev Работа и заказы / Job Offer and Request 0 07.07.2005 01:26


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


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

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