LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
27.05.2012, 16:16:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Общая главная страница для 3-х отдельных сайтов на Joomla 1.5 - вывод последних новостей  (Прочитано 544 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« : 25.01.2012, 19:30:08 »

Не знаю, в какой ветке писать, - написал здесь.
Я чайник в PHP, - поэтому не судите строго, - просто нужна помощь.
Есть 3 сайта Joomla на одном домене, и соответственно на одной базе, только разными суффиксами таблиц. Т.е. получаются адреса вида http://domen/site1, http://domen/site2 и http://domen/site3.
Есть необходимость вывести заголовки последних новостей этих сайтов на титульной странице (она статична). Обьединить колонки и вывести титлы получилось, - работает. А вот как на эти новости сформировать ссылку - проблема. Вот код:

Код:
// База Данных
define("DB_HOST", "localhost");
define("DB_LOGIN", "root");
define("DB_PASSWORD", "");
define("DB_NAME", "такая-то");

header( 'Content-Type: text/html; charset=utf-8' );
$db = mysql_connect(DB_HOST,DB_LOGIN,DB_PASSWORD) or die (mysql_error());
mysql_select_db(DB_NAME, $db);
mysql_set_charset( 'utf8' );

    /* SQL-запрос */
    $query = "SELECT title, created FROM res_content WHERE catid !=0
UNION
SELECT title, created FROM cafe_content WHERE catid!=0
UNION
SELECT title, created FROM coo_content WHERE catid!=0
ORDER BY created DESC LIMIT 3";
    $result = mysql_query($query) or die("Query failed : " . mysql_error());

...
бла-бла-бла
...

    while ($rows = mysql_fetch_assoc($result)) {
                echo $rows['title'];
                echo '<a href="Тут адрес">Подробнее...</a>';
            }
Спасибо откликнувшимся заранее...
Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #1 : 27.01.2012, 14:44:55 »

отвечаю сам на свой вопрос, - может кому интересно.
1.В каждой таблице #__content для начала добавил поле "http", в моем случае, например, таблица res_content:
Код:
ALTER TABLE res_content ADD http VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

2.Открыл файл administrator/components/com_content/admin.content.html.php и после таблицы (строка 833) добавил скрытое поле для добавления адреса:
Код:
<input name="http" type="hidden" value="http://<?php echo $_SERVER["HTTP_HOST"]; ?>/папка_сайта/" />

3.В файле libraries/joomla/database/table/content.php в классе class JTableContent extends JTable добавил:
Код:
/** @var string */
var $http = null;

4. В index.php титульной страницы изменил запрос и соответственно, сформировал ссылку, в итоге вышло такое:
Код:
// База Данных
define("DB_HOST", "localhost");
define("DB_LOGIN", "root");
define("DB_PASSWORD", "");
define("DB_NAME", "такая-то");

header( 'Content-Type: text/html; charset=utf-8' );
$db = mysql_connect(DB_HOST,DB_LOGIN,DB_PASSWORD) or die (mysql_error());
mysql_select_db(DB_NAME, $db);
mysql_set_charset( 'utf8' );

    /* SQL-запрос */
    $query = "SELECT id, title, alias, catid, created, state, http FROM res_content WHERE catid !=0 AND state>0
UNION
SELECT id, title, alias, catid, created, state, http FROM cafe_content WHERE catid!=0 AND  state>0
UNION
SELECT id, title, alias, catid, created, state, http FROM coo_content WHERE catid!=0 AND  state>0
ORDER BY created DESC LIMIT 3";

    $result = mysql_query($query) or die("Query failed : " . mysql_error());

...
бла-бла-бла
...

    while ($rows = mysql_fetch_assoc($result)) {
                echo $rows['title'];
                echo '<a class="n_link" href="'.$rows['http'].'index.php?option=com_content&view=article&id='.$rows['id'].'&catid='.$rows['catid'].'"></a>';
            }
Новость открывается, - правда, в конце адреса должен бы быть добавлен &Itemid=... , но как его туда вытащить - не знаю. Если у кого есть соображение - подскажите.
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #2 : 27.01.2012, 21:16:41 »

Ты говоришь, что " в конце адреса должен бы быть добавлен &Itemid=... , но как его туда вытащить - не знаю. ". Сначал этот Itemid надо получить. Я посмотрел твой запрос к БД и не нашёл в нём Itemid. Т.е. в $query = "SELECT id, title, и т.д. добавь Itemid. Потом в echo '<a class="n_link" href="'.$rows['http'].'index.php?option=com_content&view=article&id='.$rows['id'].'&catid='.$rows['catid'] добавь &Itemid='.$rows['Itemid']
Возможно, я неправильно понял: в твоей БД нет поля Itemid, но есть другое поле, например, state, значение которого ты хочешь использовать для Itemid. В этом случае в echo '<a class="n_link" href="'.$rows['http'].'index.php?option=com_content&view=article&id='.$rows['id'].'&catid='.$rows['catid'] добавь &Itemid='.$rows['state']
Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #3 : 27.01.2012, 21:31:26 »

просто в поле "state", если материал удален в архив, к числу добавляется -. Если запрос без AND state>0, то вытаскиваются из архива тоже.
А вот значения Itemid как раз в этой таблице нету. Если б дело было в шаблоне Joomla, Itemid узнать не проблема. А тут страница автономна, и не видит API Joomla.
Очевидно, надо пристыковывать ещё запрос к БД. Но какой?..
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #4 : 27.01.2012, 22:15:11 »

Давай начнём вот с этого: Новость открывается, - правда, в конце адреса должен бы быть добавлен &Itemid=... , но как его туда вытащить - не знаю.
Новость открывается, но тебе ещё что-то надо. А что именно? Что ты дополнительно получишь, если добавишь &Itemid=...?
Меня смутили слова из твоего последнего поста: Очевидно, надо пристыковывать ещё запрос к БД. Но какой?.. Т.е., тебе надо определиться что тебе надо, потом найти таблицу, которая содержит это, далее из неё это получить в виде переменной, затем вставляем эту переменную в &Itemid=$переменная и всё ОК.
« Последнее редактирование: 27.01.2012, 22:19:20 от Woland66 » Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #5 : 27.01.2012, 22:19:16 »

без понятия. На сколько я понимаю, Itemid - это принадлежность к определенному пункту меню. Может, и действительно не надо, если из одной категории вытягивается, например. Надо попробовать из разных. Если не будет глюка - значит и не надо.
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #6 : 27.01.2012, 22:20:35 »

Я отредактировал свой предыдущий пост, посмотри.
Если ты получил, что хотел, то тебе не нужен этот &Itemid=... Вот и всё, не парься.
Да, забыл тебе сказать: у тебя в коде таблицы указываются с префиксами типа res_ и т.д. Это неправильно, надо в целях безопасности этот префикс заменить на #_, эффект будет тем же. Но тут у тебя появится проблема: после префикса у тебя одинаковые названия таблиц, а именно content, поэтому префикс #_ в таком случае не пойдёт. Поэтому названия таблиц после префиков модифицируй типа _contents и _contentes.
C таблицами content ты скорее всего перемудрил, подозреваю, что БД организовал нерационально. Скорее всего из этих трёх таблиц надо сделать две: первая (главная) будет состоять из двух полей: ИД и название предприятия (как я понял ресторан, кафе и кухня), а вторая будет клоном одной из предыдущих трёх таблиц (связанная и подчинённая с главной), в неё надо добавить поле подстановки, значение этого поля будет браться из главной.
« Последнее редактирование: 27.01.2012, 22:40:47 от Woland66 » Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #7 : 27.01.2012, 22:39:26 »

на щет #_ я писал в начале, что база одна на 3 сайта. Поэтому суффиксы разные. И поля с одинаковыми столбцами в запросе объединяются. Не повлияет на работоспособность, если я в этом запросе напишу #_ вместо суффиксов? Веть этот файл не видит Joomla, - только таблицы?..
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #8 : 27.01.2012, 22:43:44 »

Я опять отредактировал свой предыдущий пост, посмотри.
Ещё раз повторю, что префиксы в код записывать нельзя, их надо менять на #_, это надо для безопасности. На производительность это не повлияет.

У меня первый час ночи, целый день за компом, голова уже не соображает. Итак, у тебя три сайта с одной БД. Раз так, то для каждого сайта надо на сервере создавать три папки с Joomla. На одной Joomla не получится создать три сайта, т.к. в Joomla только один файл index.php. Но, создавая (устанавливая) три папки, ты должен создать и три БД с разными префиксами. Тогда не пойму, как ты установил три Joomla, а работают они у тебя на одной БД, хотя и с разными префиксами?
« Последнее редактирование: 27.01.2012, 23:04:25 от Woland66 » Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #9 : 27.01.2012, 22:59:39 »

Woland66, хорошо, спасибо за обсуждение, буду пробовать мудрить. Может, модернизирую, чтоб убрать префиксы.
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #10 : 27.01.2012, 23:05:18 »

Ты не комплексуй, спрашивай, а то сразу застеснялся Azn
А префиксы убирать надо обязательно!
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #11 : 27.01.2012, 23:12:21 »

И ещё. Я уже говорил выше, что разные префиксы пусть остаются, ты после префикса названия двух последних таблиц измени на __contents и _contentes и всё будет ОК. Не забудь, что это надо изменить тебе не только в коде, но и таблицы в БД соответственно переименовать в _contents и _contentes.
Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #12 : 27.01.2012, 23:21:47 »

Не забудь, что это надо изменить тебе не только в коде, но и таблицы в БД соответственно переименовать в _contents и _contentes.
ну, а как тогда сама система работать будет? она ведь знает _contents, про _contentes ей же ничего не известно.
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #13 : 27.01.2012, 23:37:40 »

ну, а как тогда сама система работать будет? она ведь знает _contents, про _contentes ей же ничего не известно.
Я не понял, что ты имеешь в виду под словом система: Жумлу или БД (SQL)? Сейчас твоя БД и Joomla знает только про _content с разными префиксами. Про _contents и _contentes Жумле ты должен сообщить в коде, а в Базе данных ты должен переименовать две из трёх таблиц _content в таблицы _contents и _contentes (чтобы не путаться переименуй их в _content1 и _content2, а первая у тебя останется просто _content)
Ты прав, я ошибся: ведь у тебя три Жумлы, если просто переименовать таблицы в БД, то они их перестанут понимать. Сейчас подумаю что можно сделать
« Последнее редактирование: 27.01.2012, 23:42:08 от Woland66 » Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #14 : 27.01.2012, 23:42:44 »

я имею ввиду Joomla. Ведь 3 сайта, 3 админки. 3 Joomla, одна БД. Как я могу для одной из них переименовать таблицу _content в _contents? работать не будет.
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #15 : 27.01.2012, 23:49:19 »

Понимаешь, я не пойму как ты посадил три Жумлы на одну БД? Это ведь невозможно. Ты сам в самом начале говорил, что первый сайт у тебя http://domen/site1 (а это одна Joomla), второй http://domen/site2 (а это уже вторая) и т.д. При установке каждой Жумлы создаётся отдельная БД. Как у тебя получилась одна БД на три Жумлы? Скорее всего, ты что-то путаешь.
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #16 : 27.01.2012, 23:50:35 »

я имею ввиду Joomla. Ведь 3 сайта, 3 админки. 3 Joomla, одна БД. Как я могу для одной из них переименовать таблицу _content в _contents? работать не будет.
В том-то и дело, что не одна БД, а три...
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #17 : 27.01.2012, 23:53:15 »

Ты зайди в phpMyAdmin и убедись, что у тебя три БД, т.к. у них разные префиксы. Вот адрес для браузера, чтобы туда попасть: http://localhost/Tools/phpMyAdmin/ (у меня дэнвер, поэтому у тебя может быть другой адрес, если у тебя не дэнвер).
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #18 : 28.01.2012, 00:04:37 »

При установке Joomla генерирует БД. Когда ты установил первую Joomla, она тебе создала БД. Это первый сайт. Потом ты решил ещё создать сайт, стал устанавливать ещё одну Жумлу и она должна была создать для себя ещё одну БД, т.к. без БД Joomla не работает (на самом деле я делал попыток установить Жумлу без БД, но по-моему, это бесполезно). Но твоя вторая Joomla каким-то образом не сгенерировала для себя БД, а в БД первой Жумлы сгенерировала для себя таблицы разумеется с другим префиксом. Вот мне и не понятно, как это так получилось.
« Последнее редактирование: 28.01.2012, 00:09:12 от Woland66 » Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #19 : 28.01.2012, 00:15:23 »

нет, в тов то и дело, что я в одной всё установил:

база одна. Админок - три.
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #20 : 28.01.2012, 00:23:13 »

Расскажи, как ты устанавливал вторую Жумлу и как она не создала для себя БД, а создала для себя таблицы в БД первой Жумлы?
У меня есть вариант как это сделать, хотя не уверен, что получится, т.к. давно не ставил Жумлу. И для чего делать одну БД для трёх Жумл?
Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #21 : 28.01.2012, 00:28:34 »

при установке дистрибутива есть одноименное поле, - префикс базы данных, по-моему, но в раскрывающемся блоке, не на виду. По умолчанию там jos_ стоит.
А саму базу ту же назначаешь.
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #22 : 28.01.2012, 00:35:40 »

Итак, у тебя три таблицы _banner для каждой Жумлы. Если ты посмотришь коды Жумлы, то ты не найдёшь ссылку на cafe_banner или coo_banner, ты найдёшь только #_banner. Если в каждой Жумле будут разные баннеры, подозреваю, что все три сайта будут показывать один и тот же баннер, например, баннеры для первой Жумлы. Но, если сайты показывают свои баннеры (а не баннеры первого сайта), то логично предположить, что замена префиксов на #_ не приведёт к какой-нибудь ерунде. А вот в этом я сильно сомневаюсь.
Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #23 : 28.01.2012, 00:40:55 »

при установке дистрибутива есть одноименное поле, - префикс базы данных, по-моему, но в раскрывающемся блоке, не на виду. По умолчанию там jos_ стоит.
А саму базу ту же назначаешь.
Всё, я вспомнил. Ты прав. Тебе надо для каждого сайта создавать свою БД, чтобы в кодах не использовать префиксы, а заменять их на #_. Я уже говорил, что это для безопасности сайта. Но, если ты это сделаешь, то в кодах тебе надо будет делать три запроса на подключение к трём БД. Хотя, потом что дальше ты будешь с этим делать, я не знаю. Тогда оставляй префиксы и молись, чтобы всё обошлось.
« Последнее редактирование: 28.01.2012, 00:46:12 от Woland66 » Записан
Woland66
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 103


« Ответ #24 : 28.01.2012, 00:44:46 »

Получается (судя по скрину таблиц твоей БД), у тебя три сайта-близнеца. Не понятно только для чего?
Записан
olf
Давно я тут
****

Репутация: +3/-0
Offline Offline

Сообщений: 247



« Ответ #25 : 28.01.2012, 10:34:56 »

Там компоненты одинаковые для взаимодействия с пользователями используются для каждого сайта отдельно.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet