Получение данных из бд и вставка в шаблон - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

api

  • 2 Страниц +
  • 1
  • 2

Получение данных из бд и вставка в шаблон

#1 Пользователь не на сайте   Alexander.3 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 22
  • Регистрация: 09-Август 08
  • Репутация: 0
  • IPB version:2.3.x
 

Отправлено 06 Март 2014 - 17:29

Всем привет, я хочу получить данные из бд, например:
Вложение  Безымянный.png (12,41К)
Количество загрузок: 13
и вставить это через шаблон например:
{$author['shoutbox_shouts']}


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

Сообщение изменено: Alexander.3 (06 Март 2014 - 17:33)

0

#2 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 749
  • Регистрация: 20-Март 09
  • Репутация: 2 282
  • IPB version:3.1.x
 

Отправлено 06 Март 2014 - 18:01

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

Цитата

и вставить это через шаблон например

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

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

#3 Пользователь не на сайте   Alexander.3 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 22
  • Регистрация: 09-Август 08
  • Репутация: 0
  • IPB version:2.3.x
 

Отправлено 06 Март 2014 - 19:39

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

Сегодня например полностью пересмотрел ipsMember.php. Но так и не понял откуда беруться запросы от posts.

Например:

$member['LevelPosts'] = $v['POSTS'];

В шаблоне отлично работает, но тут же с регистром написан POSTS ( это максимальное сообщение по звездочкам )
А тут написано без регистра, но все же не понятно - почему же он берет именно сообщения... хм... В самом исходнике только регистрация есть на поиск по айпи для сообщений..
$member['posts']
0

#4 Пользователь не на сайте   Zero108 ответил: »

 
 
  • Advanced
  • ***
  • Смотреть галерею
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 1 562
  • Регистрация: 25-Июль 09
  • Репутация: 92
  • IPB version:4.1.x
 

Отправлено 06 Март 2014 - 20:24

Просмотреть сообщениеsiv1987 06 Март 2014 - 18:01 сказал(а):

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


Один человек говорил, что картинки нужно ужимать по качеству примерно на 30-40 процентов перед выкладыванием их на страницу сайта. Было это в 2003-2004 гг. Сейчас уже можно не ужимать. Скорость у пользователей в большинстве своем хорошая. Я помню свой первый компьютер в 1995 году под виндой 95 и с винтом 100 мегабайт. Тогда это было много. Сейчас у меня два винта по 3 ТБ, и я не знаю, что на них записывать. Места больше, чем мне в данный момент нужно. До серверов пока эта тема не дошла. Хостеры держат пока высокую цену на хорошее железо, а само железо пока не настолько мощное, чтобы не задумываться о таких мелочах, как пара десятков "лишних" запросов к базе данных. Но, это пока..

Сообщение изменено: Zero108 (06 Март 2014 - 20:24)

0

#5 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 749
  • Регистрация: 20-Март 09
  • Репутация: 2 282
  • IPB version:3.1.x
 

Отправлено 06 Март 2014 - 21:49

Zero108, идею вашу я понял, но с ростом ресурсов растут и требования приложений к ним. Раньше винда весила 250мб, сейчас 7гб+. Об оптимизации все равно нужно думать, особенно в случае с бд, которая зачастую является слабом местом ресурса.

Цитата

Проще говоря - интересно узнать где вообще все это происходит

ТС, "это" - понятие относительное. Вас что конкретно интересует? Каждое событие происходит в определенном месте.

Цитата

Но так и не понял откуда берутся запросы от posts

От какого posts? ipsMember служит для загрузки данных пользователя и его обработки - создания, удаления и тд.
1

#6 Пользователь не на сайте   Alexander.3 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 22
  • Регистрация: 09-Август 08
  • Репутация: 0
  • IPB version:2.3.x
 

Отправлено 06 Март 2014 - 22:46

Хочу по примеру "Всего сообщений" ( posts ) сделай собственый аналог для другой таблички, стропы...
Целый день мучал форум =)) Таковы были шаги:
Открыл шаблон, начал с панели профиля. Там увидел что используется макрос 'posts', решил пробить в файлах фтп. По интуиции набрел на ipsMember...
В итоге начал копать этот скрипт... Распишите пожалуйста какие файлы хотя бы нужно копать, там дальше сам буду мучать и крушить двиг ))) мне просто это интересно, как это все устроено, давно не получал такого вдохновения =))

Однако это сложно, так устал переписывать один и тот же скрипт... но что то я явно не то делаю, голова совсем уже не думает к вечеру, извините если как то не понятно пишу..

Сообщение изменено: Alexander.3 (06 Март 2014 - 22:51)

0

#7 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 749
  • Регистрация: 20-Март 09
  • Репутация: 2 282
  • IPB version:3.1.x
 

Отправлено 06 Март 2014 - 22:50

Цитата

Хочу по примеру "Всего сообщений" ( posts )

Количество сообщений пользователя это поле-счетчик в таблице members. Высчитывать каждый раз его сообщения было бы слишком накладно.

Цитата

собственый аналог для другой таблички, стропы.

Что такое "стропы"?
1

#8 Пользователь не на сайте   Alexander.3 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 22
  • Регистрация: 09-Август 08
  • Репутация: 0
  • IPB version:2.3.x
 

Отправлено 06 Март 2014 - 23:02

Цитата

Количество сообщений пользователя это поле-счетчик в таблице members. Высчитывать каждый раз его сообщения было бы слишком накладно.

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

Цитата

Что такое "стропы"?

Поле в таблице ( показано на скриншоте в первом сообщении )

--
Это поле находиться в таблице members ( где и берется запрос с кол-вом сообщений )
0

#9 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 749
  • Регистрация: 20-Март 09
  • Репутация: 2 282
  • IPB version:3.1.x
 

Отправлено 06 Март 2014 - 23:14

Просмотреть сообщениеAlexander.3 сказал(а):

Да, да, именно. Я хочу сделать аналог.

Аналог чего? Из members грузятся все данные, так что дополнительных запросов не нужно, ну или переделать существующий.
0

#10 Пользователь не на сайте   Alexander.3 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 22
  • Регистрация: 09-Август 08
  • Репутация: 0
  • IPB version:2.3.x
 

Отправлено 06 Март 2014 - 23:32

Хорошо, тогда задама вопрос так:

Я хочу переделать текущий запрос, где мне его можно откопать? С какого файла?

--
В будущем если получиться, то хочу создать доп.поле и с него брать кол-во для личных потребностей ) но до этого еще явно рановато.
0

#11 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 749
  • Регистрация: 20-Март 09
  • Репутация: 2 282
  • IPB version:3.1.x
 

Отправлено 06 Март 2014 - 23:44

Просмотреть сообщениеAlexander.3 сказал(а):

Я хочу переделать текущий запрос, где мне его можно откопать? С какого файла?

"Я хочу купить машину, сколько она будет стоить?"
Конкретнее, какой запрос? Их там до 15, и еще зависит на какой странице - главная, форумы, темы и тд.

Просмотреть сообщениеAlexander.3 сказал(а):

Хорошо, тогда задама вопрос так:

Лучше объясните что вы хотите сделать. Без абстракций, конкретно что и куда вывести, в каком шаблоне. Немного не понимая суть темы, вы и других людей вводите в заблуждения.

Если поле находится в таблице members, можно попробовать получить доступ используя ее имя. Если не получается, пишем в каком месте не работает, и как к ней обращаетесь.
1

#12 Пользователь не на сайте   Alexander.3 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 22
  • Регистрация: 09-Август 08
  • Репутация: 0
  • IPB version:2.3.x
 

Отправлено 07 Март 2014 - 06:35

Цитата

"Я хочу купить машину, сколько она будет стоить?"
Конкретнее, какой запрос? Их там до 15, и еще зависит на какой странице - главная, форумы, темы и тд.

Не знал, спасибо.

Цитата

Лучше объясните что вы хотите сделать. Без абстракций, конкретно что и куда вывести, в каком шаблоне. Немного не понимая суть темы, вы и других людей вводите в заблуждения.

Если поле находится в таблице members, можно попробовать получить доступ используя ее имя. Если не получается, пишем в каком месте не работает, и как к ней обращаетесь.

Хорошо, сейчас объясню что хочу сделать даже в картинках =)
-
При просмотре темы, в мини профиле сбоку я хочу добавить собственный счетчик из бд
Вот сюда:
Вложение  1.png (37,12К)
Количество загрузок: 7
Где написано черным шрифтом, это то что я хочу добавить, где написан N, это данные которые я хочу взять из бд.
Сам счетчик я хочу взять из таблицы members которая находиться тут:
-IMG-
(Красным выделена таблица, зеленым то - что я хочу указать где N в первом скринщоте )
Я даже не прошу написать код за меня, мне просто скажите где и с чего начинать :) Алгоритм или не большую последовательность.

Извините что ввел Вас в заблуждение, ничего не понятно же :)

Сообщение изменено: Alexander.3 (07 Март 2014 - 06:36)

0

#13 Пользователь не на сайте   Alexander.3 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 22
  • Регистрация: 09-Август 08
  • Репутация: 0
  • IPB version:2.3.x
 

Отправлено 07 Март 2014 - 12:32

Немножко подумал и дальше покопав исходники, вроде что то дошло :) Теперь интересно как это все сконструировать бы.

Вставляю в шаблон:
{$this->memberData['shoutbox_shouts']}

Результат: Выводит то что нужно, но только от моего вида ко всем сообщениям, значит я так понимаю memberData это индекс того кто просматривает форум, то есть будет отображать его значения.

Попробовал вписать в ipbMember
$member['testers'] = $member['member_id']['shoutbox_shouts'];

в шаблоне прописал:
{$author['testers']}

Стали появляться какие то не понятные данные )) думаем дальше..)
0

#14 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 749
  • Регистрация: 20-Март 09
  • Репутация: 2 282
  • IPB version:3.1.x
 

Отправлено 07 Март 2014 - 13:57

Просмотреть сообщениеAlexander.3 сказал(а):

{$this->memberData['shoutbox_shouts']}

$this->memberData - массив текущего пользователя.

Просмотреть сообщениеAlexander.3 сказал(а):

в шаблоне прописал:

{$author['shoutbox_shouts']} разве не доступен? Если нет:

Открыть /admin/applications/forums/modules_public/forums/topics.php
Найти
		$_extraMember = ( is_array($dataHook['members']) && count($dataHook['members']) ) ? ',m.'.implode(',m.', $dataHook['members']) : '';

Ниже добавить
		$_extraMember .= ',m.shoutbox_shouts';

Сам запрос с перечнями полей находится чуть ниже.
В ipsMember менять ничего не нужно.
0

#15 Пользователь не на сайте   Alexander.3 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 22
  • Регистрация: 09-Август 08
  • Репутация: 0
  • IPB version:2.3.x
 

Отправлено 07 Март 2014 - 15:56

Ооо оно заработало! Я даже прослезился, я с утра мучал этот форум

Сейчас чуть отойду и буду думать как это произошло, что оно заработало )) теперь вопрос, можно ли не в переменную занести эту строчку? а ниже в запрос например? Хотя сейчас сам попробую. В любом случае большое спасибо, этот файл где редактируются топик /admin/applications/forums/modules_public/forums/topics.php я и хотел узнать изнчально.
0

Сообщить об этой теме:


  • 2 Страниц +
  • 1
  • 2


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна