Автор Тема: Ошибка при выводе разделов модуля Вопрос - Ответ Santa 3.01  (Прочитано 3339 раз)

0 Пользователей и 1 Гость просматривают эту тему.

alexxela

  • Гость
При выводе карты сайта на sante 3.01 появлялось сообщение об ошибке:
Ошибка (errore):
Файл (file): .../modules/mapsite/mapsite.class.php
GET запрос (GET request):/site_map.html
Строка (String): 181 (kernel->runSQL)
SQL запрос (SQL query):
'SELECT * FROM `sf_faq_partitions`'
Table 'db_name.sf_faq_partitions' doesn't exist


В БД действительно не оказалось таблицы sf_faq_partitions, но была таблица sf_faq1_partitions
Попробовал переинсталлировать модуль Faq и Mapsite - не помогло

При анализе кода mapsite.class.php, выяснилось что в методе faq_get_partitions($pagename)
есть запрос
$sql   = 'SELECT * FROM `'.PREFIX.'_faq_partitions`';
Переделал запрос
$sql   = 'SELECT * FROM `'.PREFIX.'_'.$faq_module.'_partitions`';изменил сигнатуру метода на
faq_get_partitions($pagename, $faq_module = 'faq')изменил в методе pub_show_mapsite() вызов метода faq_get_partitions() с
$partitions = $this->faq_get_partitions($vals['faq_answers_page']);на
$partitions = $this->faq_get_partitions($vals['faq_answers_page'], $faq_module);и ошибка исчезла и в карте сайта стали благополучно выводиться разделы модуля Вопрос - Ответ
Измененный файл mapsite.class.php прилагаю.

alexxela

  • Гость
Добавил из темы http://forum.santafox.ru/index.php?topic=1360.0
Вывод новостей на карте сайта для santy 3.01
Для использования просто замените файл /modules/mapsite/mapsite.class.php

Оффлайн arteshuk

  • Разработчики
  • Ветеран
  • *****
  • Сообщений: 1 214
  • Авторитет: 130
  • Пол: Мужской
    • Просмотр профиля
faq_get_partitions($pagename, $faq_module = 'faq')

замени на

$kernel->pub_module_id_get()

иначе не будет работать для другого дочернего модуля

alexxela

  • Гость
Боюсь совет Ваш в данном случае не применим, так как конструкция
$kernel->pub_module_id_get()
вернет mapsiteN, а далеко не faq1
и запрос к базе получиться соответственно:
SELECT * FROM `sf_mapsite1_partitions`';вместо желаемого:
SELECT * FROM `sf_faq1_partitions`';
Чтобы обработать несколько модулей "Вопрос - ответ" нужно изменить код
if ($faq_module){
            $vals = $this->get_module_action_values($faq_module, "pub_show_partitions");
            if (!empty($vals['faq_answers_page']))
            {
                $partitions = $this->faq_get_partitions($vals['faq_answers_page'], $faq_module);
                if (count($partitions)>0)
                    $pages = $this->attach_more_pages($pages, $vals['faq_answers_page'], $partitions);
            }
}

в методе function pub_show_mapsite($p_id_page, $template)
если переменная $faq_module является архивом is_array($faq_module)
сделать по нему обход где в каждой итерации (для каждого экземпляра модуля faq)
вызывать faq_get_partitions
Но в данный момент вывести разделы нескольких экземпляров модуля Вопрос - Ответ у меня задачи нет.

Оффлайн arteshuk

  • Разработчики
  • Ветеран
  • *****
  • Сообщений: 1 214
  • Авторитет: 130
  • Пол: Мужской
    • Просмотр профиля
точно, сори, это ж другой модуль )))