Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Alexander.3

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

Recommended Posts

Всем привет, я хочу получить данные из бд, например:

post-22883-0-68640900-1394116121_thumb.png

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

{$author['shoutbox_shouts']}

 

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

Очень хотелось бы поговорить на эту тему.

Edited by Alexander.3

Share this post


Link to post

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

 

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

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

 

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

  • Upvote 1

Share this post


Link to post

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

 

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

Например:

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

В шаблоне отлично работает, но тут же с регистром написан POSTS ( это максимальное сообщение по звездочкам )

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

$member['posts']

Share this post


Link to post

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

 

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

Edited by Zero108

Share this post


Link to post

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

 

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

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

 

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

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

  • Upvote 1

Share this post


Link to post

Хочу по примеру "Всего сообщений" ( posts ) сделай собственый аналог для другой таблички, стропы...

Целый день мучал форум =)) Таковы были шаги:

Открыл шаблон, начал с панели профиля. Там увидел что используется макрос 'posts', решил пробить в файлах фтп. По интуиции набрел на ipsMember...

В итоге начал копать этот скрипт... Распишите пожалуйста какие файлы хотя бы нужно копать, там дальше сам буду мучать и крушить двиг ))) мне просто это интересно, как это все устроено, давно не получал такого вдохновения =))

 

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

Edited by Alexander.3

Share this post


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

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

 

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

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

  • Upvote 1

Share this post


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

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

 

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

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

 

--

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

Share this post


Link to post

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

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

Share this post


Link to post

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

 

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

 

--

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

Share this post


Link to post

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

"Я хочу купить машину, сколько она будет стоить?"

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

 

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

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

 

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

  • Upvote 1

Share this post


Link to post
"Я хочу купить машину, сколько она будет стоить?"

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

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

 

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

 

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

Хорошо, сейчас объясню что хочу сделать даже в картинках =)

-

При просмотре темы, в мини профиле сбоку я хочу добавить собственный счетчик из бд

Вот сюда:

post-22883-0-54560500-1394162808_thumb.png

Где написано черным шрифтом, это то что я хочу добавить, где написан N, это данные которые я хочу взять из бд.

Сам счетчик я хочу взять из таблицы members которая находиться тут:

image.png

(Красным выделена таблица, зеленым то - что я хочу указать где N в первом скринщоте )

Я даже не прошу написать код за меня, мне просто скажите где и с чего начинать :) Алгоритм или не большую последовательность.

 

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

Edited by Alexander.3

Share this post


Link to post

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

 

Вставляю в шаблон:

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

 

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

 

Попробовал вписать в ipbMember

$member['testers'] = $member['member_id']['shoutbox_shouts'];

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

{$author['testers']}

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

Share this post


Link to post

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

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

 

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

{$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 менять ничего не нужно.

Share this post


Link to post

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

 

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

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...