Работа с дополнительными полями

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
RedScorp
phpBB 1.4.1
Сообщения: 43
Стаж: 20 лет 10 месяцев
Откуда: г. Уральск

Работа с дополнительными полями

Сообщение RedScorp »

Доброго времени суток.
Сразу прошу прощения за дерзость в дублировании подобной темы, ибо не фига не нашел (хотя мож не так искал).

Я прошу помощи в обработке дополнительных полей. phpBB позволяет их сохранять/редактировать пользователю, но мне надо узнать его значение при формировании списка категорий/постов. В частности, я создаю в админ.панели новое дополнительное поле "click_cells" ("Кликабельные ячейки"), видимость - "в личном разделе" и указываю что оно вида "Да/Нет". Как обработать это поле в "styles/subsilver2/template/forumlist_body.html". Предполагаю что приблизительно так (но не знаю как обратиться к созданному полю)

Код: Выделить всё

<td class="row1" width="31" align="center">{forumrow.FORUM_FOLDER_IMG}</td>
   <!-- IF "ИМЯ_ДОП_ПОЛЯ_ИЗ_ПРОФИЛЯ" -->
      <td class="row1 row-h" onclick="window.location.href='{forumrow.U_VIEWFORUM}'">
   <!-- ELSE -->
      <td class="row1">
   <!-- ENDIF -->
   <!-- IF forumrow.FORUM_IMAGE -->
Нашел старый добрый способ - ручками все прописать. В предыдущем пункте "ИМЯ_ДОП_ПОЛЯ_ИЗ_ПРОФИЛЯ" меняем на "S_CLICK_CELLS", в index.php прописываем чтение значения из таблицы пользователя:

Код: Выделить всё

'S_DISPLAY_BIRTHDAY_LIST'       => ($config['load_birthdays']) ? true : false,
'S_CLICK_CELLS'         => ($user->data['user_click_cells']) ? true : false,
'U_MARK_FORUMS'         => ($user->data['is_registered'].....
Правда, тогда придется в профиле обрабатывать это поле (user_click_cells) на сохранение/изменение, т.е. менять ручками еще пару темлеев, а это не хотелось бы. Ведь есть стандартные "дополнительные поля"...

Заранее огромное спасибо за помощь.
Изображение Изображение
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Работа с дополнительными полями

Сообщение nissin »

Примерно так:

Код: Выделить всё

if ($user->data['user_id'] != ANONYMOUS)
{
	include_once($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
	$cp = new custom_profile();
	$profile_fields = $cp->generate_profile_fields_template('grab', $user->data['user_id']);
	$profile_fields = (isset($profile_fields[$user->data['user_id']])) ? $cp->generate_profile_fields_template('show', false, $profile_fields[$user->data['user_id']]) : array();
	if (!empty($profile_fields['row']))
	{
		$template->assign_vars($profile_fields['row']);
	}
}
После этого в шаблонах станут доступны поля (на примере click_cells):
PROFILE_СLICK_CELLS_VALUE - значение поля
PROFILE_СLICK_CELLS_TYPE - тип поля
PROFILE_СLICK_CELLS_NAME - имя поля на нужном языке
PROFILE_СLICK_CELLS_EXPLAIN - описание поля
S_PROFILE_СLICK_CELLS - существует ли такое поле

PS: В работе не проверял, но думаю ничего не упустил.
Аватара пользователя
RedScorp
phpBB 1.4.1
Сообщения: 43
Стаж: 20 лет 10 месяцев
Откуда: г. Уральск

Re: Работа с дополнительными полями

Сообщение RedScorp »

Кстати почему поле появилось в разделе "Личные данные", поидее это "Личные настройки"?! Хотя догадываюсь что это просто прописано в темплее...

Хмм, попробовал в index.php включить указанный код после:

Код: Выделить всё

$template->assign_vars(array(
...
);
В styles/subsilver2/template/forumlist_body.html указал следующее (подобный код встречается там дважды):

Код: Выделить всё

<td class="row1" width="31" align="center">{forumrow.FORUM_FOLDER_IMG}</td>
   <!-- IF PROFILE_СLICK_CELLS_VALUE -->
      <td class="row1 row-h" onclick="window.location.href='{forumrow.U_VIEWFORUM}'">
   <!-- ELSE -->
      <td class="row1">
   <!-- ENDIF -->
   <!-- IF forumrow.FORUM_IMAGE -->
Даже пробовал указать "<!-- IF PROFILE_СLICK_CELLS_VALUE == 1 -->". Все равно нет такой переменной. Можно просто поставить ее вывод, скажем ниже в шаблоне:

Код: Выделить всё

<p class="forumdesc">{forumrow.FORUM_DESC} - {PROFILE_СLICK_CELLS_VALUE}</p>
на экране будет "описание категории - {PROFILE_СLICK_CELLS_VALUE}". А не значение этого поля.

И что я не так делаю?!

PS. Кликабельные ячейки делаю по совету - "How to: make forum rows clickable" (Vjacheslav Trushkin). Без моего условия - все работает. Но просто у меня есть народ кто против таких кликов, вот для них и делаю.
Изображение Изображение
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Работа с дополнительными полями

Сообщение nissin »

Попробуйте отладить значение переменной $profile_fields.

А вообще правильней это делать по другому, поскольку это действительно настройка.
Посмотрите как сделано например в быстром ответе или в моде для аватар слева (который с настройками).
Аватара пользователя
RedScorp
phpBB 1.4.1
Сообщения: 43
Стаж: 20 лет 10 месяцев
Откуда: г. Уральск

Re: Работа с дополнительными полями

Сообщение RedScorp »

Большое спасибо.
Я попробовал сделать на основе "Выбор между лево- и правосторонним prosilver'ом" и все удачно получилось (ну естественно со своими "переменными"). Хотя я не совсем понял куда именно в базе сохраняется эта пользовательская настройка...
Изображение Изображение
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Работа с дополнительными полями

Сообщение nissin »

Сохраняется в поле user_options в phpp_users.
Как битовая маска, поле конечно не резиновое, но места достаточно, используется int(11), значит можно сохранить 88 бит.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Работа с дополнительными полями

Сообщение rxu »

На 32-хбитных системах можно хранить числа не длиннее 32-х разрядов (ограничение PHP).
Изображение

Вернуться в «Для авторов (phpBB 3.0.x)»