Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Alexander.3

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

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

03/06/14 14:30 (изменено)

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

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

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

{$author['shoutbox_shouts']}

 

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

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

Изменено пользователем Alexander.3

Поделиться сообщением


Ссылка на сообщение

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

 

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

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

 

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

 

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

Например:

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

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

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

$member['posts']

Поделиться сообщением


Ссылка на сообщение
03/06/14 17:25 (изменено)

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

 

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

Изменено пользователем Zero108

Поделиться сообщением


Ссылка на сообщение

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

 

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

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

 

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
03/06/14 19:47 (изменено)

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

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

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

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

 

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

Изменено пользователем Alexander.3

Поделиться сообщением


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

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

 

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

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

  • Upvote 1

Поделиться сообщением


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

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

 

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

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

 

--

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

 

--

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

 

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

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

 

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
03/07/14 03:36 (изменено)
"Я хочу купить машину, сколько она будет стоить?"

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

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

 

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

 

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

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

-

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

Вот сюда:

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

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

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

image.png

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

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

 

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

Изменено пользователем Alexander.3

Поделиться сообщением


Ссылка на сообщение

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

 

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

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

 

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

 

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

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

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

{$author['testers']}

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...