|
olf
|
 |
« : 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
|
 |
« Ответ #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
Сообщений: 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 : 27.01.2012, 21:31:26 » |
|
просто в поле "state", если материал удален в архив, к числу добавляется -. Если запрос без AND state>0, то вытаскиваются из архива тоже. А вот значения Itemid как раз в этой таблице нету. Если б дело было в шаблоне Joomla, Itemid узнать не проблема. А тут страница автономна, и не видит API Joomla. Очевидно, надо пристыковывать ещё запрос к БД. Но какой?..
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #4 : 27.01.2012, 22:15:11 » |
|
Давай начнём вот с этого: Новость открывается, - правда, в конце адреса должен бы быть добавлен &Itemid=... , но как его туда вытащить - не знаю. Новость открывается, но тебе ещё что-то надо. А что именно? Что ты дополнительно получишь, если добавишь &Itemid=...? Меня смутили слова из твоего последнего поста: Очевидно, надо пристыковывать ещё запрос к БД. Но какой?.. Т.е., тебе надо определиться что тебе надо, потом найти таблицу, которая содержит это, далее из неё это получить в виде переменной, затем вставляем эту переменную в &Itemid=$переменная и всё ОК.
|
|
|
|
« Последнее редактирование: 27.01.2012, 22:19:20 от Woland66 »
|
Записан
|
|
|
|
|
olf
|
 |
« Ответ #5 : 27.01.2012, 22:19:16 » |
|
без понятия. На сколько я понимаю, Itemid - это принадлежность к определенному пункту меню. Может, и действительно не надо, если из одной категории вытягивается, например. Надо попробовать из разных. Если не будет глюка - значит и не надо.
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #6 : 27.01.2012, 22:20:35 » |
|
Я отредактировал свой предыдущий пост, посмотри. Если ты получил, что хотел, то тебе не нужен этот &Itemid=... Вот и всё, не парься. Да, забыл тебе сказать: у тебя в коде таблицы указываются с префиксами типа res_ и т.д. Это неправильно, надо в целях безопасности этот префикс заменить на #_, эффект будет тем же. Но тут у тебя появится проблема: после префикса у тебя одинаковые названия таблиц, а именно content, поэтому префикс #_ в таком случае не пойдёт. Поэтому названия таблиц после префиков модифицируй типа _contents и _contentes. C таблицами content ты скорее всего перемудрил, подозреваю, что БД организовал нерационально. Скорее всего из этих трёх таблиц надо сделать две: первая (главная) будет состоять из двух полей: ИД и название предприятия (как я понял ресторан, кафе и кухня), а вторая будет клоном одной из предыдущих трёх таблиц (связанная и подчинённая с главной), в неё надо добавить поле подстановки, значение этого поля будет браться из главной.
|
|
|
|
« Последнее редактирование: 27.01.2012, 22:40:47 от Woland66 »
|
Записан
|
|
|
|
|
olf
|
 |
« Ответ #7 : 27.01.2012, 22:39:26 » |
|
на щет #_ я писал в начале, что база одна на 3 сайта. Поэтому суффиксы разные. И поля с одинаковыми столбцами в запросе объединяются. Не повлияет на работоспособность, если я в этом запросе напишу #_ вместо суффиксов? Веть этот файл не видит Joomla, - только таблицы?..
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #8 : 27.01.2012, 22:43:44 » |
|
Я опять отредактировал свой предыдущий пост, посмотри. Ещё раз повторю, что префиксы в код записывать нельзя, их надо менять на #_, это надо для безопасности. На производительность это не повлияет.
У меня первый час ночи, целый день за компом, голова уже не соображает. Итак, у тебя три сайта с одной БД. Раз так, то для каждого сайта надо на сервере создавать три папки с Joomla. На одной Joomla не получится создать три сайта, т.к. в Joomla только один файл index.php. Но, создавая (устанавливая) три папки, ты должен создать и три БД с разными префиксами. Тогда не пойму, как ты установил три Joomla, а работают они у тебя на одной БД, хотя и с разными префиксами?
|
|
|
|
« Последнее редактирование: 27.01.2012, 23:04:25 от Woland66 »
|
Записан
|
|
|
|
|
olf
|
 |
« Ответ #9 : 27.01.2012, 22:59:39 » |
|
Woland66, хорошо, спасибо за обсуждение, буду пробовать мудрить. Может, модернизирую, чтоб убрать префиксы.
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #10 : 27.01.2012, 23:05:18 » |
|
Ты не комплексуй, спрашивай, а то сразу застеснялся  А префиксы убирать надо обязательно!
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #11 : 27.01.2012, 23:12:21 » |
|
И ещё. Я уже говорил выше, что разные префиксы пусть остаются, ты после префикса названия двух последних таблиц измени на __contents и _contentes и всё будет ОК. Не забудь, что это надо изменить тебе не только в коде, но и таблицы в БД соответственно переименовать в _contents и _contentes.
|
|
|
|
|
Записан
|
|
|
|
|
olf
|
 |
« Ответ #12 : 27.01.2012, 23:21:47 » |
|
Не забудь, что это надо изменить тебе не только в коде, но и таблицы в БД соответственно переименовать в _contents и _contentes.
ну, а как тогда сама система работать будет? она ведь знает _contents, про _contentes ей же ничего не известно.
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
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
|
 |
« Ответ #14 : 27.01.2012, 23:42:44 » |
|
я имею ввиду Joomla. Ведь 3 сайта, 3 админки. 3 Joomla, одна БД. Как я могу для одной из них переименовать таблицу _content в _contents? работать не будет.
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #15 : 27.01.2012, 23:49:19 » |
|
Понимаешь, я не пойму как ты посадил три Жумлы на одну БД? Это ведь невозможно. Ты сам в самом начале говорил, что первый сайт у тебя http://domen/site1 (а это одна Joomla), второй http://domen/site2 (а это уже вторая) и т.д. При установке каждой Жумлы создаётся отдельная БД. Как у тебя получилась одна БД на три Жумлы? Скорее всего, ты что-то путаешь.
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #16 : 27.01.2012, 23:50:35 » |
|
я имею ввиду Joomla. Ведь 3 сайта, 3 админки. 3 Joomla, одна БД. Как я могу для одной из них переименовать таблицу _content в _contents? работать не будет.
В том-то и дело, что не одна БД, а три...
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #17 : 27.01.2012, 23:53:15 » |
|
Ты зайди в phpMyAdmin и убедись, что у тебя три БД, т.к. у них разные префиксы. Вот адрес для браузера, чтобы туда попасть: http://localhost/Tools/phpMyAdmin/ (у меня дэнвер, поэтому у тебя может быть другой адрес, если у тебя не дэнвер).
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #18 : 28.01.2012, 00:04:37 » |
|
При установке Joomla генерирует БД. Когда ты установил первую Joomla, она тебе создала БД. Это первый сайт. Потом ты решил ещё создать сайт, стал устанавливать ещё одну Жумлу и она должна была создать для себя ещё одну БД, т.к. без БД Joomla не работает (на самом деле я делал попыток установить Жумлу без БД, но по-моему, это бесполезно). Но твоя вторая Joomla каким-то образом не сгенерировала для себя БД, а в БД первой Жумлы сгенерировала для себя таблицы разумеется с другим префиксом. Вот мне и не понятно, как это так получилось.
|
|
|
|
« Последнее редактирование: 28.01.2012, 00:09:12 от Woland66 »
|
Записан
|
|
|
|
|
olf
|
 |
« Ответ #19 : 28.01.2012, 00:15:23 » |
|
нет, в тов то и дело, что я в одной всё установил:  база одна. Админок - три.
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #20 : 28.01.2012, 00:23:13 » |
|
Расскажи, как ты устанавливал вторую Жумлу и как она не создала для себя БД, а создала для себя таблицы в БД первой Жумлы? У меня есть вариант как это сделать, хотя не уверен, что получится, т.к. давно не ставил Жумлу. И для чего делать одну БД для трёх Жумл?
|
|
|
|
|
Записан
|
|
|
|
|
olf
|
 |
« Ответ #21 : 28.01.2012, 00:28:34 » |
|
при установке дистрибутива есть одноименное поле, - префикс базы данных, по-моему, но в раскрывающемся блоке, не на виду. По умолчанию там jos_ стоит. А саму базу ту же назначаешь.
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #22 : 28.01.2012, 00:35:40 » |
|
Итак, у тебя три таблицы _banner для каждой Жумлы. Если ты посмотришь коды Жумлы, то ты не найдёшь ссылку на cafe_banner или coo_banner, ты найдёшь только #_banner. Если в каждой Жумле будут разные баннеры, подозреваю, что все три сайта будут показывать один и тот же баннер, например, баннеры для первой Жумлы. Но, если сайты показывают свои баннеры (а не баннеры первого сайта), то логично предположить, что замена префиксов на #_ не приведёт к какой-нибудь ерунде. А вот в этом я сильно сомневаюсь.
|
|
|
|
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #23 : 28.01.2012, 00:40:55 » |
|
при установке дистрибутива есть одноименное поле, - префикс базы данных, по-моему, но в раскрывающемся блоке, не на виду. По умолчанию там jos_ стоит. А саму базу ту же назначаешь.
Всё, я вспомнил. Ты прав. Тебе надо для каждого сайта создавать свою БД, чтобы в кодах не использовать префиксы, а заменять их на #_. Я уже говорил, что это для безопасности сайта. Но, если ты это сделаешь, то в кодах тебе надо будет делать три запроса на подключение к трём БД. Хотя, потом что дальше ты будешь с этим делать, я не знаю. Тогда оставляй префиксы и молись, чтобы всё обошлось.
|
|
|
|
« Последнее редактирование: 28.01.2012, 00:46:12 от Woland66 »
|
Записан
|
|
|
|
Woland66
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 103
|
 |
« Ответ #24 : 28.01.2012, 00:44:46 » |
|
Получается (судя по скрину таблиц твоей БД), у тебя три сайта-близнеца. Не понятно только для чего?
|
|
|
|
|
Записан
|
|
|
|
|
olf
|
 |
« Ответ #25 : 28.01.2012, 10:34:56 » |
|
Там компоненты одинаковые для взаимодействия с пользователями используются для каждого сайта отдельно.
|
|
|
|
|
Записан
|
|
|
|
|