Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

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

olf

  • Захожу иногда
  • 360
  • 5 / 1
Не знаю, в какой ветке писать, - написал здесь.
Я чайник в 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

  • Захожу иногда
  • 360
  • 5 / 1
отвечаю сам на свой вопрос, - может кому интересно.
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

  • Захожу иногда
  • 87
  • 1 / 0
Ты говоришь, что " в конце адреса должен бы быть добавлен &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

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

Woland66

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

olf

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

Woland66

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

olf

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

Woland66

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

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

olf

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

Woland66

  • Захожу иногда
  • 87
  • 1 / 0
Ты не комплексуй, спрашивай, а то сразу застеснялся :)
А префиксы убирать надо обязательно!
*

Woland66

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

olf

  • Захожу иногда
  • 360
  • 5 / 1
Не забудь, что это надо изменить тебе не только в коде, но и таблицы в БД соответственно переименовать в _contents и _contentes.
ну, а как тогда сама система работать будет? она ведь знает _contents, про _contentes ей же ничего не известно.
*

Woland66

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

olf

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

Woland66

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

Woland66

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

Woland66

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

Woland66

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

olf

  • Захожу иногда
  • 360
  • 5 / 1
нет, в тов то и дело, что я в одной всё установил:

база одна. Админок - три.
*

Woland66

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

olf

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

Woland66

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

Woland66

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

Woland66

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

olf

  • Захожу иногда
  • 360
  • 5 / 1
Там компоненты одинаковые для взаимодействия с пользователями используются для каждого сайта отдельно.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Joomla 1.5 как убрать кнопку редактировать материант с сайта

Автор andriy465

Ответов: 5
Просмотров: 4154
Последний ответ 12.11.2023, 23:37:03
от all_zer
Нужно wiki под Joomla

Автор THE KILLERS

Ответов: 9
Просмотров: 9746
Последний ответ 05.11.2020, 20:56:47
от Kijv
Поиск статьи по url сайта в админке Joomla 1.5

Автор Tema

Ответов: 5
Просмотров: 2247
Последний ответ 14.08.2020, 07:16:44
от rsn
Не работает страница XML выдает ошибку: This page contains the following errors

Автор vitaliywolf

Ответов: 20
Просмотров: 19125
Последний ответ 07.05.2020, 22:24:16
от sivers
не работает главная без index.php

Автор Mary Poppins

Ответов: 11
Просмотров: 8940
Последний ответ 11.12.2018, 18:28:30
от all_zer