Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

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

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

{$author['shoutbox_shouts']}

 

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

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

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

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

Опубликовано:

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

 

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

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

 

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

Опубликовано:
  • Автор

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

 

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

Например:

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

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

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

$member['posts']

Опубликовано:

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

 

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

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

Опубликовано:

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

 

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

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

 

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

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

Опубликовано:
  • Автор

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

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

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

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

 

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

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

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

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

 

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

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

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

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

 

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

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

 

--

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

Опубликовано:

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

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

Опубликовано:
  • Автор

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

 

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

 

--

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

Опубликовано:

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

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

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

 

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

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

 

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

Опубликовано:
  • Автор
"Я хочу купить машину, сколько она будет стоить?"

Конкретнее, какой запрос? Их там до 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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.