Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SMF получить доступ со всех страниц к эл. массива. 
V
    Опции темы
Ghirik
Дата 19.2.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: нет
Всего: 20



$settings['number_recent_posts'] получить доступ со всех страниц. 
Всем привет.

Я в php мало чего смыслю, на уровне JavaScript-а   Т.е., что с JavaScript-ом схоже, то понимаю.

Вопрос у меня по форуму SMF 1.1.4

Мне нужно иметь доступ к $settings['number_recent_posts'] на всех страницах форума. Как это можно сделать? Что и где прописать? Может кто найдет время, чтобы популярно описать процесс инициализации глобальных массивов, и где(когда) регулируется(загружается) содержимое в них. А то массив $settings присутствует при генерации всех страниц, но содержимое в нем меняется в зависимости от генерируемой страницы.

Научите пожалуйста.


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
A1ekcandr
Дата 19.2.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 27.6.2007

Репутация: 1
Всего: 1



ой, знать php на уровне java-scripta это сильно конечно,

кароче вам надо скорее всего брать эти данные из базы соответствующим  запросом к базе данных

Это сообщение отредактировал(а) A1ekcandr - 19.2.2008, 15:06
PM MAIL   Вверх
solenko
Дата 19.2.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Для обращения к глобальным переменным используется либо ключевое слово global либо специальный массив $GLOBALS. Т.е. либо
Код

function foo() {
  global $array;
  var_dump($array);
}
//либо
function foo() {
  var_dump($GLOBALS['array']);
}



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Ghirik
Дата 19.2.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: нет
Всего: 20



Цитата

кароче вам надо скорее всего брать эти данные из базы соответствующим  запросом к базе данных


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

Если выложу все файлы форума в html доступ, не посмотрите?

Добавлено @ 15:43
Цитата

Для обращения к глобальным переменным используется либо ключевое слово global либо специальный массив $GLOBALS. 


Да, в начале функции есть объявление массива $settings, но сам массив не содержит нужного элемента. Содержит, только если загружается главная страница форума.




Это сообщение отредактировал(а) Ghirik - 19.2.2008, 15:45


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
solenko
Дата 19.2.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Вам скорее в "Работа с готовыми скриптами и поиск движков". А выкладывать исходник есть смысл только если модуль у вас самописный (которы recent posts показывает). Если нет, то просто укажите версию SMF и название модуля.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
zibox86
Дата 19.2.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 11.12.2007

Репутация: нет
Всего: 1



Я так по вашим сообщениям на форуме JS, понимаю спецэфекты на javacript законченю, теперь время написать ядро пришло!
Вылаживайте поможем чем сможим!

PM MAIL WWW   Вверх
Ghirik
Дата 19.2.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: нет
Всего: 20



Это дефолтовая тема SMF1.1.4 

Я работаю только с шаблонами, а выборка похоже происходит файлами в директории Sources. А там для меня кошмар. smile

Добавлено через 5 минут и 28 секунд
Вывод из массива на главную страницу происходит из файла Themes/default/BoardIndex.template функция template_main() элемент $settings['number_recent_posts']



--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
solenko
Дата 19.2.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



if там убрать недостаточно. 
Код

        if (empty($board) && empty($topic))
        {
            require_once($sourcedir . '/BoardIndex.php');
            return 'BoardIndex';
        }
        // Topic is empty, and action is empty.... MessageIndex!
        elseif (empty($topic))
        {
            require_once($sourcedir . '/MessageIndex.php');
            return 'MessageIndex';
        }
        // Board is not empty... topic is not empty... action is empty.. Display!
        else
        {
            require_once($sourcedir . '/Display.php');
            return 'Display';
        }


Т.е. в зависимотси от контекста подключаются разные файлы. Получение последних постов есть только в BoardIndex:
Код

    if (!empty($settings['number_recent_posts']) && $settings['number_recent_posts'] > 1)
    {
        require_once($sourcedir . '/Recent.php');

        if (($context['latest_posts'] = cache_get_data('boardindex-latest_posts:' . md5($user_info['query_see_board'] . $user_info['language']), 180)) == null)
        {
            $context['latest_posts'] = getLastPosts($settings['number_recent_posts']);
            cache_put_data('boardindex-latest_posts:' . md5($user_info['query_see_board'] . $user_info['language']), $context['latest_posts'], 180);
        }

        // We have to clean up the cached data a bit.
        foreach ($context['latest_posts'] as $k => $post)
        {
            $context['latest_posts'][$k]['time'] = timeformat($post['raw_timestamp']);
            $context['latest_posts'][$k]['timestamp'] = forum_time(true, $post['raw_timestamp']);
        }
    }


Соответственно, этот код нужно добавить в MessageIndex и Display и потом еще добавть вывод этого всего в шаблоны соответствующих страниц


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Ghirik
Дата 19.2.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: нет
Всего: 20



Ага, вроде всё понимаю, спасибо, пошел делать....


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
Ghirik
Дата 19.2.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: нет
Всего: 20



Блин, что то не так....

Вот такая ошибка стала вылетать:

Цитата

Fatal error: require_once() [function.require]: Failed opening required '/Recent.php' (include_path='.:/usr/lib/php:/usr/local/lib/php:/usr/local/lib/php/Zend') in /home/rucnru/public_html/Sources/MessageIndex.php on line 103


Добавлено через 4 минуты и 15 секунд
А в каком месте следует присоединять этот кусок?


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
solenko
Дата 19.2.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



У вас переменная $sourcedir не определена, вот и пытается он в корне искать файл. Посмотрите откуда она берется в BoardIndex и сделайте так же, или посмотрите как подключатся другие файлы. Ну и захардкодить можно. В вашем случае require_once('./Sources/Recent.php');


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Ghirik
Дата 19.2.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: нет
Всего: 20



СуперРРРРРРРР !!!!!!! Задал от корня. Всё заработало!

Всем огромное спасибо!

Это сообщение отредактировал(а) Ghirik - 19.2.2008, 17:13


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
Ghirik
Дата 20.2.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: нет
Всего: 20



Возник ещё один вопрос.

При создании и редактировании сообщений $settings['number_recent_posts'] все равно пустой. Где ещё прописать?

Может можно как то глобально иметь этот массив загруженным, а не прописывать во всех файлах. Я пробовал прямо в index.php прописать, но не работает.

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

Спасибо.




--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
GeneralElectric
Дата 20.2.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



вроде, в первом же ответе написали - 
Цитата(A1ekcandr @  19.2.2008,  15:05 Найти цитируемый пост)
брать эти данные из базы соответствующим  запросом к базе данных

То есть, написать код, получающий эти ресент постс, в один из файлов, которые подключаются к любому скрипту. К примеру, сразу после соединения с БД.

Кстати, во всем топике не задали, кажется, самый главный вопрос современности, зачем это нужно?

PM MAIL   Вверх
solenko
Дата 20.2.2008, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



GeneralElectric, а зачем српашивать зачем нужен блок последних сообщений на форуме? )

Ghirik, а где в индексе вставлять пробовали? по идее если вставить после 
Код

loadPermissions();

и прописать $context в global, то все должно работать.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.