Перейти к контенту

Добавить поле в профиль


Рекомендуемые сообщения

IPB v2.1.x

 

Нужно добавить в профиль дополнительное поле - select box, которое должно создаваться динамически на основе неких данных из таблиц разрабатываемого мода.

 

Вариант с использованием таблицы ibf_pfields_data и класса custom_fields не подходит, ибо в данном случае внутренность select'а сохраняется статично. Кроме того, очень хочется иметь возможность подсвечивать элементы списка (<option value='0' style='background:#aabbcc'>title</option>). Точнее, это требование критично.

 

Какие ещё существуют варианты?

Ссылка на комментарий
Поделиться на других сайтах

Так я и спрашиваю: как?

 

В phpbb версии мода я просто передаю в шаблон сформированный select в том виде, в каком он мне нужен. Там это просто.

 

В IPB всё гораздо сложнее. Возможно, я ошибаюсь. Если есть способ передать в шаблон дополнительный select целиком, пожалуйста, расскажите мне о нём.

Ссылка на комментарий
Поделиться на других сайтах

Вы просто не дали себе труда разобраться, как это делается в IPB. :D

 

У шаблона есть переменные. Их можно увидеть, открыв кусок шаблона в админке и нажав кнопку «Show data variables». Например, имеем абстрактный шаблон MyHeader с переменными $data,$level,$title="". Из скрипта он будет вызываться, например, вот так:

$this->output .= $this->html->MyHeader($least_array, $sync_level, $title);

То есть, вам понадобится сформировать html код select'а в скрипте, записать его в какую-либо переменную — скажем, $select — и передать её шаблону.

$select = "<select name="with_post"><option value="1">{ipb.lang['with_post_y']}</option><option value="0">{ipb.lang['with_post_n']}</option></select>";
$this->output .= $this->html->MyHeader($least_array, $sync_level, $title, $select);

Соответственно в админке делаем Show Data Variables для шаблона и дописываем туда переменную $select. Например, $data,$level,$title="",$select="".

 

Всё. После этого в шаблоне можно использовать локальную переменную $select. Оформлять её, впрочем, лучше как {$select}. ;)

 

Помимо этого, в шаблонах автоматом доступны часть данных, например настройки IPB — {ipb.vars[?]}, языковые переменные {ipb.lang[?]}, входящие переменные сценария {ipb.input[?]} и так далее.

Ссылка на комментарий
Поделиться на других сайтах

Вы просто не дали себе труда разобраться, как это делается в IPB. :D

Дал, только осилил не сразу ;) Большое спасибо за развёрнутый ответ - многое стало понятнее. Сам уже успел догадаться, но до "более другого" способа:

 

user_cp::personal() {
 ...
 $this->ipsclass->member['my_field'] = genMySelect()
 ...
}

 

Фактически, одна строчка кода решает проблему, и это хорошо.

 

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

 

Но ничего, для phpBB готово, для IPB почти, на очереди версия для vBulletin... За пару-тройку дней должен закончить с программированием, ещё пара дней на написание лицензий и верстание простенького сайта и вот оно - счастье :)

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.