Изменение нативного модуля для работы с другими таблицами

Я хочу изменить собственный модуль joomla, который отображает статьи категории. Я хочу, чтобы он отображал статьи из других таблиц префиксов (оба сайта joomla находятся на одном сервере).

Обратите внимание, что я уже просмотрел доступные расширения, но ни одно из них не подходит.

Я попытался изменить helper.php собственных таблиц модуля joomla, изменив

$com_path = но я получаю Fatal error.

Собственный код: $com_path = JPATH_SITE.'/components/com_content/';

Моя попытка: $com_path = '/homez.420/kmxsiksf/rsc/components/com_content/helpers/route.php


person JinSnow    schedule 17.07.2012    source источник
comment
так вы пытаетесь подключиться к route.php или вам нужен код для получения статей для Joomla 2.5?   -  person Lodder    schedule 17.07.2012
comment
Привет, Лоддер, на самом деле я пытался изменить helper.php нативного модуля, я думал, что путь может быть изменен внутри него, я ошибаюсь? Я никогда не слышал о route.php, взаимодействует ли он с helper.php и устанавливает ли путь? Спасибо за ваш ответ, мне действительно нужна информация о глобальном способе сделать это   -  person JinSnow    schedule 17.07.2012
comment
да, вам нужно будет использовать require_once JPATH_SITE.'/components/com_content/router.php';. Если вы хотите, чтобы я выслал вам helper.php, который я использовал для своего аккордеона, чтобы получить статьи Joomla 2.5, я был бы более чем счастлив сделать это.   -  person Lodder    schedule 17.07.2012
comment
На самом деле заголовок моего поста недостаточно ясен: изменение .... для работы с -внешними-таблицами (другой префикс)   -  person JinSnow    schedule 17.07.2012
comment
Хо Лоддер, ты такой классный! Должен ли я опубликовать helper.php здесь?   -  person JinSnow    schedule 17.07.2012
comment
Вот только начало, а то очень длинное! определено('_JEXEC') или умереть; $com_path = JPATH_SITE.'/components/com_content/'; require_once $com_path.'router.php'; require_once $com_path.'helpers/route.php'; JModelLegacy::addIncludePath($com_path . '/models', 'ContentModel');   -  person JinSnow    schedule 17.07.2012
comment
abstract class modArticlesCategoryHelper {public static function getList(&$params) { // Получить экземпляр общей модели статей $articles = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' =› true)) ; // Задаем параметры приложения в модели $app = JFactory::getApplication(); $appParams = $app-›getParams(); $articles-›setState('params', $appParams); // Устанавливаем фильтры на основе параметров модуля $articles-›setState('list.start', 0); $articles-›setState('list.limit', (int) $params-›get('count', 0)); $articles-›setState('filter.published', 1);   -  person JinSnow    schedule 17.07.2012
comment
вам было бы лучше опубликовать это как ответ с тегами кода, если проблема была решена;)   -  person Lodder    schedule 17.07.2012
comment
На самом деле мы 2 очень взволнованных человека, пытающихся ответить ... (один в Канаде, другой в Германии ...) Ответ слишком короткий, и мы пытаемся найти способ отправить вам файл ...   -  person JinSnow    schedule 17.07.2012
comment
chat.stackoverflow.com/rooms/14015/joomla-chat   -  person Lodder    schedule 17.07.2012
comment
Я загрузил 2 файла по этому адресу: ge.tt/9RiVSdK: helper.php, а также mod_articles_category. php. Я считаю, что маршрут установлен в helper.php, но я не уверен. Спасибо за помощь, Лоддер! (Я канадский друг, потому что Гиом разговаривает по телефону, поэтому для него это не очень удобно!) Мы искали ответ несколько дней, но не смогли найти подвоха!   -  person JinSnow    schedule 17.07.2012
comment
не стесняйтесь загружать мой модуль аккордеона, который использует код для получения статей Joomla 2.5: joomjunk.co.uk/products/module-home/accordion.html#download   -  person Lodder    schedule 17.07.2012
comment
Лоддер, ваш модуль аккордеона извлекает статьи из внешних таблиц (другой префикс), и если да, то скопировали и изменили ли вы второй router.php?   -  person JinSnow    schedule 17.07.2012
comment
нет, не из внешних таблиц, однако вы можете адаптировать код подключения к базе данных для подключения к конкретной таблице вручную. И нет, я не копировал и не модифицировал route.php, я просто подключился к Joomla по умолчанию.   -  person Lodder    schedule 17.07.2012
comment
Я буду боготворить тебя всю оставшуюся жизнь, если ты объяснишь мне, как это сделать вручную! Я могу создать новую тему, чтобы проголосовать за ваш ответ.   -  person JinSnow    schedule 17.07.2012
comment
$connection = mysql_connect('HOST', 'DB_USER' , 'PASSWORD'); $selection = mysql_select_db('DB_NAME', $connection); Затем просто используйте SELECT FROM sql-запрос   -  person Lodder    schedule 17.07.2012
comment
Спасибо! Но должен ли я вставить это в helper.php, который я вам отправил?   -  person JinSnow    schedule 17.07.2012
comment
а статьи поступают из базы данных Joomla или из совершенно отдельной базы данных? если они поступают из совершенно отдельной базы данных, да, добавьте код, который я вам отправил.   -  person Lodder    schedule 17.07.2012
comment
Спасибо за помощь, Лоддер! Статьи находятся в одной базе данных, но в разных таблицах: мой веб-сайт использует таблицу arcs_, а статью, которую я хочу использовать, — в таблице rsc_.   -  person JinSnow    schedule 17.07.2012
comment
ааа теперь понятно, в таком случае попробуй изменить FROM #__tablename на FROM rsc_table   -  person Lodder    schedule 17.07.2012
comment
Большое спасибо за вашу помощь Lodder! Я сделал поиск, и я могу найти только #__tablename в router.php. Так что буду менять там. Должен ли я также изменить com_path в helper.php и установить что-то вроде: $com_path = '/homez.420/kmxsiksf/rsc/components/com_content/helpers/route.php`?   -  person JinSnow    schedule 18.07.2012
comment
имя таблицы не должно быть определено в route.php, оно должно быть в helper.php. И нет, не меняйте $com_path на это, оставьте require_once JPATH_SITE.'/components/com_content/router.php';   -  person Lodder    schedule 18.07.2012
comment
Большое спасибо за терпение, Лоддер! Я не очень хорошо объяснил, и вы это поняли! Я сделал поиск в helper.php, и там нет ничего похожего на #_content.   -  person JinSnow    schedule 18.07.2012
comment
Я также просмотрел ваш модуль аккордеона helper.php и не могу найти #_content. Вы знаете, где спрятан этот #_content?   -  person JinSnow    schedule 18.07.2012
comment
Большое спасибо, Лоддер! Вот одно решение! Здорово! Поскольку я могу использовать только аккордеон (для часто задаваемых вопросов), только если я могу использовать собственный модуль joomla, мне интересно, где я должен изменить этот #_content, поскольку его нет в его helper.php   -  person JinSnow    schedule 18.07.2012


Ответы (1)


Чтобы использовать внешнюю базу данных (даже если она находится на вашем сервере) в расширениях Joomla, правильным способом было бы установить некоторые параметры перед получением объекта JDatabase.

Создайте вспомогательный класс для обработки вашей внешней базы данных, и в каждом методе, использующем объект БД, вы просто устанавливаете параметры своей внешней базы данных перед извлечением объекта:

$option = array(); 
$option['driver']   = 'mysql';
$option['host']     = 'localhost';    // In your case probably localhost 
$option['user']     = 'dbusername';       // User for database authentication $option['password'] = 'badpass12345';   // Password for database authentication $option['database'] = 'bigdatabase';      // Database name 
$option['prefix']   = 'abc_';             // Database prefix (may be empty)  
$db = & JDatabase::getInstance( $option );

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

person Stilero    schedule 08.10.2012