Новости Joomla

👩‍💻 Компонент "CS Афиши" для Joomla.

👩‍💻 Компонент "CS Афиши" для Joomla.

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

В состав пакета расширений входят:
- Компонент "CS Афиши"
- Модуль "Календарь событий"
- Модуль "Предстоящие события"
- Библиотека "ImgResize"

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

Модуль "Календарь событий" отображает предстоящие и прошедшие мероприятие на календаре, с отображением мероприятий на конкретную дату во всплывающем окне.

Модуль "Предстоящие события" показывает список предстоящий событий по порядку их наступления.

P.S. Расширение платное, но плата символическая, чисто для отработки приема платежей. Ключи без ограничения по времени, купившие сейчас - смогут обновляться без ограничений.

Разработчик - участник нашего сообщества Дмитрий Денисов (@codersite).

Страница расширения
Демо

Яндекс выпустил инструмент Видимость сайта в Алисе AI.

Яндекс выпустил инструмент Видимость сайта в Алисе AI.

С тех пор, как в поисковиках появились нейроответы ИИ, трафик на сайты стал гораздо меньше, так как пользователь стал получать информацию непосредственно на странице поисковика без перехода на сайт. Но при генерации ответа ИИ указывает источники - ссылки на сайты, информация которых была использована для генерации ответа.

Долгое время у всех был немой вопрос: "Как же теперь оценивать эффективность сайта?". Теперь этот на этот вопрос отчасти отвечает новый инструмент аналитики.
Процитируем справку Яндекса по инструменту:
На запросы пользователей в Поиске может отвечать Алиса AI. Ответы появляются в поисковой выдаче, в объектных ответах и на отдельной вкладке Поиска. В них чаще всего упоминаются страницы сайтов, на которые Алиса AI опиралась при подготовке ответа.

С помощью инструмента Видимость сайта в Алисе AI в Яндекс Вебмастере вы можете:
- узнать долю упоминаний сайта среди источников в ответах Алисы AI в Поиске и отследить динамику изменений;
- посмотреть примеры запросов, по которым страницы сайта показываются в ответах Алисы AI;
- посмотреть примеры сайтов той же тематики, которые часто упоминаются в генеративной выдаче.
Данные отображаются за последние 3 месяца и обновляются каждую неделю.

Статистика собирается только по тем запросам, по которым ваш сайт уже находится достаточно высоко в поисковой выдаче. Это позволяет анализировать видимость именно в той нише, где вы заинтересованы в продвижении, и избегать «размытия» по малозначимым для вас запросам.

Кроме того, такой подход обусловлен работой Алисы AI: она строит ответ с опорой на самые релевантные, информативные и качественные страницы, которые обычно занимают высокие позиции в Поиске.

Чтобы увидеть статистику вашего сайта в меню Яндекс.Вебмастера перейдите в раздел "Эффективность" и далее в "Показы сайта в Алисе AI".

В начале февраля 2026г. был вебинар с Михаилом Сливинским - амбассадором Поиска Яндекса, и в рамках вебинара была озвучена просьба сделать такой инструмент. Скорее всего разработка на тот момент уже велась, потому что от просьбы до релиза прошло около 2-х месяцев. В любом случае хорошо, что такая статистика появилась.

Показы сайта в Алисе AI в вашем Яндекс,Вебмастере.

@joomlafeed

👩‍💻 ИИ-админ для Joomla ближе, чем вы думаете: Joomla MCP.

👩‍💻 ИИ-админ для Joomla ближе, чем вы думаете: Joomla MCP.

В февральском номере Joomla Community Magazine в статье Evolving Joomla - Joomla CMS MCP Server: Opening the Door to AI-Powered Administration рассказывается о работе команды разработчиков над внедрением в ядро Joomla MCP-сервера.

Что такое MCP-сервер?
Последние годы всех захватывает бум ИИ-технологий. Появились ИИ-агенты - программы, устанавливаемые на сервер или компьютер, которые получают от вас запрос или задачу в человеческом виде и могут выполнять действия с файлами, ходить по сайтам, создавать сайты, программировать и т.д. Люди используют ИИ-агентов в самых разных ситуациях: от написания и проверки кода (даже там, где язык программирования не знаете совсем) до планирования путешествий и бронирования гостиницы.

ИИ-агенты могут использовать различные программные инструменты по протоколу Model Context Protocol (MCP). Для этого разработчик программы должен внедрить MCP в свой продукт или сервис. Так, например, ваш ИИ-агент может ходить по сайтам через браузер и собирать нужную информацию, управляя браузером через MCP-сервер. Или использовать функционал IDE PHP Storm для написания кода, сбора и отладки ошибок, использовать поиск PHP Storm по кодовой базе, а не простой текстовый поиск по файлам. MCP предоставляет набор функций для полноценного управления программным обеспечением.

В случае с Joomla, сервер MCP может предоставить администраторам следующие возможности:
- Автоматическое создание категорий, материалов и меню на основе карты сайта или PDF-файла.
- Создавайть SEO-оптимизированные заголовки и метаописания в пакетном режиме.
- Обновлять расширения на нескольких сайтах одновременно
- Создание посадочные страницы.

Важно отметить, что сервер MCP не задумывался как функция, доступная только «супер-администраторам». Цель инициативы — создать решение, которое будет простым в настройке, маломощным и доступным для широкого круга пользователей.

В процессе разработки точка входа Joomla (аналогично Site, Administrator, Api, Cli), которая будет работать с Streamable HTTP, необходимым для MCP. Аутентификация пока что предполагается на токенах, но затем планируется создание универсального OAuth-сервера для Joomla.
Фактические возможности MCP — инструменты, ресурсы и подсказки — реализованы в виде плагинов для обеспечения расширяемости. Таким образом ожидаем, что и сторонние разработчики смогут создавать MCP-плагины для внедрения поддержки своих расширений Joomla для работы с ИИ.

@joomlafeed

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

Yurets

  • Захожу иногда
  • 405
  • 92 / 0
  • Губернатор острова Борнео
Всем привет.
Как видно многим, компонент JoomLeague разрабатывался и "затачивался" для командных видов спорта (футбол, хоккей и пр.). Однако индивидуальные виды (бокс, атлетика, бильярд и пр.) очевидно также заслуживают внимания.
К сожалению, официальный ответ разработчиков компонента ничем не порадовал и работа над "Individual events mode" вестись скорее всего, увы, не будет.
Именно этот факт (а скорее даже тон администрации официального сайта ) и подтолкнул меня к постепенной модификации компонента для индивидуальных видов спорта.

В этой теме я буду делиться своими скромными результатами с вами. На официальном сайте ничего писАть не хочу.

Дано: Joomla! 1.0.15 Lavra Edition 2008 + JoomLeague v.0.9.3 + JL_0.93_russian. Компонент модифицируется для работы с сайтом близкой мне бильярдной тематики (снукерной) для моего коллеги Lama.
В комнате с белым потолком
*

Yurets

  • Захожу иногда
  • 405
  • 92 / 0
  • Губернатор острова Борнео
Итак, финт первый и его тема "Автоматическое создание одноименной команды при создании нового игрока".
Дело в том, что, в отличии от командных видов спорта, в индивидуальных - такие понятия в компоненте JL как "команда" и "игрок" должны быть  "приклеены" друг к другу. Ранее было необходимо вручную заполнять обе соответствующие формы. Ниже я покажу способ, как объединить формы регистрации нового игрока и команды в одну.

Важное замечание: настоятельно рекомендую делать бэкапы файлов перед их модификацией, а также все эксперименты проводить на "голом" компоненте и локальной копии сайта.

1. Открываем файл administrator\components\com_joomleague\admin.joomleague.php
Ищем строки:
break;
      case 
'new':
      case 
'edit':
        
$row = new Player$database );
        
$row->load$cid[0] );

и между "кейсами" пишем следующее
[spoiler title=Посмотреть код]
brake
;
case 
'new':
	
$row = new Player$database );
	
$row_team = new JL_Team$database );//
	
$row_team->load$cid[0] ); //
        
if ($row->checked_out && $row->checked_out <> $my->id && $my->id != $project->joomleague_admin &&
         
$my->id != $project->joomleague_editor && $my->usertype != 'Administrator' && $my->usertype != 'Super Administrator') {
          
          
mosRedirectJL_ADMIN_COMPONENT_LINK'This Item has been checked out');
        }
        
        if (
$cid[0]) {
          
$row->checkout$my->id );
        }
	
	

        
$selectedvalue=$row->nation;
        
$countrycode=explode("_"_JL_LOCALE);
	
	

        
$countries[] = mosHTML::makeOption'0'_JL_ADMIN_SELECT_NATIONALITY );
        
$database->setQuery"SELECT countries_id, countries_name, countries_localname, countries_iso_code_2, countries_iso_code_3 
FROM #__joomleague_countries ORDER BY published DESC, countries_name, countries_iso_code_3"
);
        
$results $database->loadObjectList();
        foreach (
$results AS $result) {
        
	
$namevalue=$result->countries_name;
        
	
if (isset(
$country[$result->countries_iso_code_3])) $namevalue=$country[$result->countries_iso_code_3];
        
	
if (
strtoupper($result->countries_iso_code_2)==strtoupper($countrycode[0])) {
        
	
	
if (
is_null($row->nation)||$row->nation==0$selectedvalue=$result->countries_id;
        
	
	
$namevalue=$result->countries_localname;
        
	
}
        
	
$value=$result->countries_iso_code_3." ($namevalue)";
        
	
$countries[] = mosHTML::makeOption$result->countries_id"$value);
	
	
	
	
}
       
$clist mosHTML::selectList$countries'nation''class="inputbox" size="1"','value''text'$selectedvalue );
	
   
	
   
	
   
$clubs[] = mosHTML::makeOption'0'_JL_ADMIN_SELECT_CLUB ); // club selector
	
   
$database->setQuery"SELECT id AS value, name AS text FROM #__joomleague_clubs ORDER BY name"); //
       
$clubs array_merge$clubs$database->loadObjectList() ); //
	
   
$clist_teams mosHTML::selectList$clubs'club_id''class="inputbox" size="1"','value''text'$row_team->club_id ); //

        
$positions[] = mosHTML::makeOption'0'_JL_ADMIN_SELECT_POSITION );

	
	
$database->setQuery"SELECT id AS value, name AS text FROM #__joomleague_positions order by ordering");
	
	
$positions array_merge$positions$database->loadObjectList() );
	
	
$positionlist mosHTML::selectList$positions'default_position_id''class="inputbox" size="1"','value''text'$row->default_position_id );
        if (
is_null($row->nation)||$row->nation==0$clist.=_JL_ADMIN_SELECT_COUNTRY_HINT;
        
        
$users[] = mosHTML::makeOption'0'_JL_ADMIN_SELECT_USER );
        
$database->setQuery"SELECT id AS value, name AS text 
                                FROM #__users " 
);
        
$users array_merge$users$database->loadObjectList() );

        
$user_list mosHTML::selectList$users'jl_user_id''class="inputbox" size="1"','value''text'$row->jl_user_id );
	
	


        unset( 
$users );
        
        
$view JL_ADMIN_TEMPLATE_PATH.'/edit_form_playerz.tpl.php'// my custom template
        
require JL_ADMIN_TEMPLATE_PATH.'/view.tpl.php';   
	
  break;
	
  
	
  
      case 
'edit':
        
$row = new Player$database );
        
$row->load$cid[0] ); //... 
[/spoiler]
Таким образом мы разделяем задачи "new" и "edit", чтобы впоследствии можно было править отдельно и игрока и его команду.
Опускаемся ниже и ищем строки

      
case 'save':
      case 
'apply':
	
	
$row = new Player$database );
	
	
$row->save($_POST"");
	
      if (
$task == 'apply'mosRedirectJL_ADMIN_COMPONENT_LINK."&act=$act&task=edit&cid[0]=$row->id);
        else 
mosRedirectJL_ADMIN_COMPONENT_LINK."&act=$act");
      break;

и меняем их на
[spoiler title=Посмотреть код]case 'save':
      case 
'apply':
	
	
$row = new Player$database );
	
	
$row->save($_POST"");
	
	
$row_team = new JL_Team$database );// insert team
	
	
$row_team->save($_POST"");
	
      if (
$task == 'apply'mosRedirectJL_ADMIN_COMPONENT_LINK."&act=$act&task=edit&cid[0]=$row->id);
        else 
mosRedirectJL_ADMIN_COMPONENT_LINK."&act=$act");
      break;
[/spoiler]
Теперь при нажатии на "Сохранить" данные формы будут вставлены в соответствующие поля таблиц jos_joomleague_players и jos_joomleague_teams.

2. Шаблон edit_form_playerz.tpl.php с общей формой, подключаемый выше, имеет следующий вид:
[spoiler title=Посмотреть код шаблона]
Код
<?php defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); ?>

<html>
<head>

<script language="javascript" type="text/javascript">

   function submitbutton(pressbutton) {
      var form = document.adminForm;
      if (pressbutton == 'cancel') {
        submitform( pressbutton );
            return;
      }

      // do field validation

     if (form.lastname.value == ""){
        alert( "<?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_JS_CHECK2;?>" );
     }
else if (form.name.value == ""){
                alert( "<?php echo _JL_ADMIN_EDIT_FORM_TEAMS_JS_CHECK1;?>" ); //
              }//
     else if (form.short_name.value == ""){//
                alert( "<?php echo _JL_ADMIN_EDIT_FORM_TEAMS_JS_CHECK2;?>" );//
            }//

      else {
          submitform( pressbutton );
      }
   }

function completer() {
var tmp = document.getElementById('name').value;
if (tmp == "") {
var text1 = document.getElementById('firstname');
var text2 = document.getElementById('lastname');
var text3 = text2.value + " " +text1.value;
document.getElementById('name').value = text3;
}
else {
document.getElementById('name').value = tmp;
}
}
function recompleter() {
var text1 = document.getElementById('firstname');
var text2 = document.getElementById('lastname');
var text3 = text2.value + " " +text1.value;
document.getElementById('name').value = text3;
}
</script>

<title></title>
<style>
.bl {
color: #006699;
}
</style>
</head>

<body>
 
  <form action="index2.php" method="post" name="adminForm" id="adminForm">
    <div id="right">
      <div id="rightpad">
        <!-- Header START -->

        <div id="step">
          <div class="t">
            <div class="t">
              <div class="t"></div>
            </div>
          </div>

          <div class="m" align="left">
            <div class="far-right">
              <div class="button1-left">
                <div class="help">
                  <a href="http://www.joomleague.de" alt="<?php echo _JL_ADMIN_MANUAL;?>" title="<?php echo _JL_ADMIN_MANUAL;?>" target="blank"><?php echo _JL_ADMIN_MANUAL;?></a>
                </div>
              </div>

              <div class="button1-left">
                <div class="forum">
                  <a href="http://www.joomleague.de/forum/" alt="<?php echo _JL_ADMIN_FORUM;?>" title="<?php echo _JL_ADMIN_FORUM;?>" target="blank"><?php echo _JL_ADMIN_FORUM;?></a>
                </div>
              </div>

              <div class="button1-left">
                <div class="about">
                  <a href="http://www.joomleague.de" alt="<?php echo _JL_ADMIN_INFO;?>" title="<?php echo _JL_ADMIN_INFO;?>" target="blank"><?php echo _JL_ADMIN_INFO;?></a>
                </div>
              </div>
            </div>

            <div class="button1-left">
              <div class="blank">
                <a href="index2.php?option=com_joomleague"></a>
              </div>
            </div><span class="step"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_PLAYERS;?></span>
          </div>

          <div class="b">
            <div class="b">
              <div class="b"></div>
            </div>
          </div>
        </div><!-- Header END -->

        <div id="installer">
          <!-- Title 1 START -->

          <div class="t">
            <div class="t">
              <div class="t"></div>
            </div>
          </div>

          <div class="m" align="left">
            <h2><?php echo $row->id ? _JL_ADMIN_EDIT_FORM_PLAYERS_TITLE_EDIT : _JL_ADMIN_EDIT_FORM_PLAYERS_TITLE_NEW;?></h2><!-- Titel 1 END -->
           

<div align="center"><strong>! - обязательные для заполнения поля</strong><br />
<hr width="50%" noshade="noshade" style="height:1px;"><br /></div>

<!-- Content 1 START -->

            <div class="install-text">
              <table cellpadding="4" cellspacing="1" border="0" width="100%" class="adminform">
                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_FIRSTNAME;?></td>

                  <td width="80%"><input class="inputbox" type="text" name="firstname" id="firstname" size="20" maxlength="64" value="<?php echo $row->firstname;?>"></td>
                </tr>

                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_LASTNAME;?></td>

                  <td width="80%"><input class="inputbox" type="text" name="lastname" id="lastname" size="20" maxlength="64" value="<?php echo $row->lastname;?>" onBlur="completer();">
<strong>!</strong>&nbsp;<img src="/administrator/components/com_joomleague/images/projects.png" border="0" align="absmiddle" style="cursor:pointer;" onClick="recompleter();">
</td>
                </tr>

                <tr>
                  <td width="20%" align="right" class="bl"><?php echo _JL_ADMIN_EDIT_FORM_TEAMS_NAME;?></td>

                  <td width="80%"><input class="inputbox" type="text" name="name" id="name" size="50" maxlength="250" readonly="" value="<?php echo $row_team->name;?>" /></td>
                </tr>

                <tr>
                  <td width="20%" align="right" class="bl"><?php echo _JL_TEAMS_MIDDLENAME;?></td>

                  <td width="80%"><input class="inputbox" type="text" name="middle_name" size="15" maxlength="15" value="<?php echo $row_team->middle_name;?>" /></td>
                </tr>

                <tr>
                  <td width="20%" align="right" class="bl"><?php echo _JL_ADMIN_EDIT_FORM_TEAMS_SHORTNAME;?></td>

                  <td width="80%"><input class="inputbox" type="text" name="short_name" size="5" maxlength="3" value="<?php echo $row_team->short_name;?>" /> <strong>!</strong></td>
                </tr>

                  <td width="20%" align="right" class="bl"><?php echo _JL_ADMIN_EDIT_FORM_TEAMS_CLUB;?></td>

                  <td width="80%"><?php echo $clist_teams;?></td>
                </tr>

                  <td width="20%" align="right" class="bl"><?php echo _JL_ADMIN_EDIT_FORM_TEAMS_DESCRIPTION;?> (команды)</td>

                  <td width="80%"><input class="inputbox" type="text" name="description" size="50" maxlength="250" value="<?php echo $row_team->description;?>" /></td>
                </tr>

                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_BIRTHDAY;?></td>

                  <td width="80%"><input class="inputbox" type="text" name="birthday" size="20" maxlength="64" value="<?php echo $row->birthday;?>"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_DATE_FORMAT;?></td>
                </tr>

                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_COUNTRY;?></td>

                  <td width="80%"><?php echo $clist;?></td>
                </tr>

                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERTOOL_POSITION;?></td>

                  <td width="80%"><?php echo $positionlist;?></td>
                </tr>

                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERTOOL_PHOTO;?></td>
<?php
                $picture = '';
                if ($row->default_picture != '') { $picture = $row->default_picture;}
                if($picture != ""){ ?>
                  <td width="80%" align="left"><img src="<?php echo sprintf("%s/%s",_JOOMLA_JL_LIVE_SITE, $row->default_picture);?>" border="0"></td>
                </tr><?php } ?>

                <tr>
                  <td width="20%" align="right"><?php echo _JOOMLA_JL_LIVE_SITE;?>/</td>

                  <td width="80%"><input class="inputbox" type="text" name="default_picture" size="50" maxlength="250" value="<?php echo sprintf("%s",$picture);?>" /td>
                </tr>

                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERTOOL_HEIGHT;?></td>

                  <td width="80%"><input class="inputbox" type="text" name="default_height" size="5" maxlength="3" value="<?php echo $row->default_height;?>"></td>
                </tr>

                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERTOOL_WEIGHT;?></td>

                  <td width="80%"><input class="inputbox" type="text" name="default_weight" size="5" maxlength="3" value="<?php echo $row->default_weight;?>"></td>
                </tr>

                <tr>
                  <td align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_JLUSER;?></td>

                  <td><?php echo $user_list; ?></td>
                </tr>

                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_INFO;?></td>

                  <td width="80%"><input class="inputbox" type="text" name="info" size="50" maxlength="250" value="<?php echo $row->info;?>"></td>
                </tr>
             
                <tr>
                  <td width="20%" align="right"><?php echo _JL_ADMIN_EDIT_FORM_PLAYERS_DESCRIPTION;?> (игрока)</td>

                  <td width="80%">
                    <?php
                    // parameters : areaname, content, hidden field, width, height, rows, cols
                    editorArea( 'editor1',  $row->description , 'description', '600', '250', '50', '5' ) ;
                    ?>
                  </td>
                </tr>
              </table>
            </div>
            <div class="clr"></div>
          </div>

          <div class="b">
            <div class="b">
              <div class="b"></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="clr"></div>
    <input type="hidden" name="id" value="<?php echo $row->id; ?>">
    <input type="hidden" name="option" value="<?php echo JL_OPTION;?>">
    <input type="hidden" name="act" value="<?php echo JL_ACTION;?>">
    <input type="hidden" name="task" value="">
  </form>
</body>
</html>
[/spoiler]
Сохраните его в папке administrator\components\com_joomleague\templates\.
После проделанных выше манипуляций форма регистрации нового игрока имеет вид:

Для удобства я выделил названия полей, касающиеся команды, синим шрифтом. Поле "Название" заполняется автоматически с помощью JavaScript после заполнения полей Имя и Фамилия и редактированию не подлежит. Но если вы все-таки ошиблись, то исправьте Имя или Фамилию на правильную и нажмите на шестеренку справа от поля Фамилия.
3. После заполнения формы тискаем "Сохранить" и видим, что появился новый игрок и новая команда:





4. При редактировании данных команды или игрока выводятся старые формы.
P.S.: при удалении игрока придется пока что вручную удалять и его команду, но и этот момент я сделаю.
В комнате с белым потолком
*

Yurets

  • Захожу иногда
  • 405
  • 92 / 0
  • Губернатор острова Борнео
Финт второй или "Автоматическое добавление игрока при добавлении его команды в проект".
По умолчанию в компоненте требуется после добавления команд вручную "заходить" в них и добавлять игроков. В нашем случае команде "Пупкин Вася" нужно добавить игрока Васю Пупкина и так по всем командам. При большом количестве участников соревнований эта процедура может подорвать здоровье. Поэтому Lama предложил идею добавлять игрока автоматически при добавлении его команды в проект.

Открываем файл administrator\components\com_joomleague\classes\joomleague.class.php и ищем строки
foreach($diff2 as $v){
	
$query .= sprintf("insert into #__joomleague_team_joomleague (project_id,team_id) values (%s,%s);\n",$this->id$v);
}

Перепишем их на свой манер:
[spoiler title=Посмотреть код]
foreach($diff2 as $v){
	
$query .= sprintf("insert into #__joomleague_team_joomleague (project_id,team_id) values (%s,%s);\n",$this->id$v);
	
	
$qry_name "SELECT name FROM #__joomleague_teams WHERE id=".$v;
	
	
$this->_db->setQuery($qry_name);
	
	
$team $this->_db->loadResult();
	

	
	
$tmp explode(" "$team);
	
	
$name $tmp[1];
	
	
$famil $tmp[0];
	
	

	
	
$this->_db->setQuery("SELECT id FROM #__joomleague_players WHERE firstname=\"$name\" AND lastname=\"$famil\"");
	
	
$pl_id $this->_db->loadResult();
	
	

	
	
$query_assign_pl sprintf("insert into #__joomleague_playertool (project_id,team_id,player_id) values (%s,%s,%s);\n",$this->id$v$pl_id);
	
	
$this->_db->setQuery($query_assign_pl);
	
	
$this->_db->query_batch(false);
	
}
[/spoiler]
Для добавления игрока в проект достаточно внести в таблицу jos_joomleague_playertool всего три значения: player_id, team_id и   project_id. Из них мы сейчас знаем два последних. Первое вычисляем просто:
1) по team_id из jos_joomleague_team_joomleague вычисляем name из jos_joomleague_teams
2) затем разбиваем name на Имя и Фамилию и ищем в таблице jos_joomleague_players id игрока с таким именем и фамилией
3) используем этот id для вставки в таблицу.

Всё. Теперь при добавлении команды в ней уже будет "сидеть" её единственный игрок. Удачи.
В комнате с белым потолком
*

Yurets

  • Захожу иногда
  • 405
  • 92 / 0
  • Губернатор острова Борнео
Первый баг. :)
« Ответ #4 : 13.09.2008, 02:59:31 »
Lama, пока что первый и единственный бета-тестер моих модификаций, нашел первый баг: при создании нового "События" в "Подробностях матча" список игроков был пуст...
Как оказалось, для таблицы jos_joomleague_playertool недостаточно только трех значений. Нужно вносить также position_id (и ещё желательно weight и height каждого игрока). Этот самый position_id хранится в jos_joomleague_players как default_position_id. Там же можно найти default_height и default_weight.
Поэтому автодобавление игрока к команде нужно немного модифицировать (снова ковыряем файл \administrator\components\com_joomleague\classes\joomleague.class.php).

Код из предыдущего поста необходимо привести к такому виду:
[spoiler title=Посмотреть код]
foreach($diff2 as $v) {
	
$query .= sprintf("insert into #__joomleague_team_joomleague (project_id,team_id) values (%s,%s);\n",$this->id$v);
	
$qry_name "SELECT name FROM #__joomleague_teams WHERE id=".$v;
	
$this->_db->setQuery($qry_name);
	
$team $this->_db->loadResult();
	
	
	
	
	

	
	
$tmp explode(" "$team);
	
	
$name $tmp[1];
	
	
$famil $tmp[0];
	
	
	
	
	

	
$this->_db->setQuery("SELECT id, default_position_id, default_height, default_weight FROM #__joomleague_players WHERE firstname=\"$name\" AND lastname=\"$famil\"");
	

	
$result $this->_db->loadObjectList();
	

	
	
foreach (
$result as $res) {
	
	
	
$pl_id $res->id;
	
	
	
$pl_position $res->default_position_id;
	
	
	
$pl_height $res->default_height;
	
	
	
$pl_weight $res->default_weight;
	
	
}
	
$query_assign_pl sprintf("insert into #__joomleague_playertool (project_id, team_id, player_id, position_id, height, weight) values (%s,%s,%s,%s,%s,%s);\n",$this->id$v$pl_id$pl_position$pl_height$pl_weight);
	
$this->_db->setQuery($query_assign_pl);
	
$this->_db->query_batch(false);
}
[/spoiler]

Удачи.
В комнате с белым потолком
*

Yurets

  • Захожу иногда
  • 405
  • 92 / 0
  • Губернатор острова Борнео
Запятые у судей
« Ответ #5 : 14.09.2008, 23:41:54 »
Зачем-то у судей между их фамилией и именем разработчики решили вставить запятую... Убрать её можно просто:
1) Открываем файл components\com_joomleague\joomleague.html.php, ищем в нем строчку

else echo $matchInfo->referee_lastname.", ".$matchInfo->referee_firstname;

ну и удаляем эту запятую совсем. Мелочь, а приятно.  *DRINK*
В комнате с белым потолком
*

Yurets

  • Захожу иногда
  • 405
  • 92 / 0
  • Губернатор острова Борнео
Инфо игрока вместо команды
« Ответ #6 : 19.09.2008, 02:42:09 »
Трюк №4 и его тема: инфо игрока вместо команды.
При выводе таблицы с сегодняшними или будущими матчами и клике на ФИО участника снизу выскакивает подменю с некоторыми опциями и
первая из которых - посмотреть информацию об этой команде (вот такая иконка ""). Затем, пройдя по ссылке можно увидеть, что, конечно, в команде-то всего один игрок - этот же самый ФИО. Тут и было придумано "перекидывать" при клике на "Инфо команды" в "Инфо игрока" этого единственного.
Для этого откроем файл components/com_joomleague/joomleague.html.php и найдем в нем фрагмент:

if ($config['show_team_link']==1) {
	

	
$output .= '<a href="'.sefRelToAbs(JL_COMPONENT_LINK.'&amp;func=showPlayers&amp;p='.$projectId.'&amp;ttid='.$teamtoolid.JL_ITEMID_SUFFIX).'">
	
<img src="'
.JL_TEMPLATE_FOLDERS_URL.'/images/team_icon.png" border="0" alt="'._JL_PAGE_TITLE_PLAYERS.'&nbsp;'.$teamname.'" title="'._JL_PAGE_TITLE_PLAYERS.'&nbsp;" /></a>&nbsp;';
}


Перепишем его в таком виде:


if ($config['show_team_link']==1) {
	
$qry_name "SELECT name FROM #__joomleague_teams WHERE id=".$teamid;
	
$joomleague->_db->setQuery($qry_name);
	
$team $joomleague->_db->loadResult();
	

	
$tmp explode(" "$team);
	
$name $tmp[1];
	
$famil $tmp[0];
	
	

	
$joomleague->_db->setQuery("SELECT id FROM #__joomleague_players WHERE firstname=\"$name\" AND lastname=\"$famil\"");
	
$pl_id $joomleague->_db->loadResult();
	
	

	
$output .= '<a href="'.sefRelToAbs(JL_COMPONENT_LINK.'&amp;func=showPlayer&amp;p='.$projectId.'&amp;pid='.$pl_id.JL_ITEMID_SUFFIX).'"><img src="'.JL_TEMPLATE_FOLDERS_URL.'/images/team_icon.png" border="0" alt="'._JL_PAGE_TITLE_PLAYERS.'&nbsp;'.$teamname.'" title="'._JL_PAGE_TITLE_PLAYERS.'&nbsp;'.$teamname.'" /></a>&nbsp;';
}

Собственно и всё. Теперь ссылка на иконке "" будет вести сразу в расширенную информацию об этом игроке.  yes!
Удачи.
В комнате с белым потолком
*

icepancher

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
  • Не тисипи моё айпи...
Доброй ночи!

Очень заинтересовали ваши разработки, появится немножко времени, обезательно расберусь. У меня сайт боксерской тематики.

Мега спасибо, тож нужно для бильярдной тематики. 
*

Lama

  • Захожу иногда
  • 108
  • 2 / 0
Для бильярдной тематики это как раз по нашему замыслу  ;D
*

Yurets

  • Захожу иногда
  • 405
  • 92 / 0
  • Губернатор острова Борнео
"Закрываем" проект
« Ответ #10 : 09.12.2008, 13:06:26 »
Делаем на перспективу - у проектов есть флаг "опубликован", но нету "текущий" или уже "прошел". То есть закрыть соревнования как бы нельзя. В разработке каких-нибудь "примочек" для JL такая опция, думаю, не помешает - знать прошли уже эти соревнования или ещё идут.
Итак, делаем бэкапы, берем отвертку и начинаем крутить:
1) Создаем поле `active` с таблице проектов:
Код
ALTER TABLE `jos_joomleague` ADD `active` TINYINT(1) NOT NULL DEFAULT '0' AFTER `published`

2) Открываем /administrator/components/com_joomleague/templates/edit_list_projects.tpl.php
ищем
Код
<th width="10%" align="center" nowrap="nowrap"><?php echo _JL_ADMIN_PUBLISHED;?></th>
под ней дописываем →
Код
<th width="10%" align="center" nowrap="nowrap">Active</th>

[spoiler title=ищем ниже]<?php

      $task = $row->published ? 'unpublish' : 'publish';
      $img = $row->published ? 'tick.png' : 'publish_x.png';
?>
      <td width="10%" align="center">
        <a href="javascript: void(0);" onclick="return listItemTask('cb<?php echo $i;?>','<?php echo $task;?>')">
          <img src="images/<?php echo $img;?>" width="12" height="12" border="0" alt="" />
        </a>
      </td>
<?php
          $k = 1 - $k; } ?>[/spoiler]
[spoiler title=перепишем этот кусок вот как:]<?php

      $task = $row->published ? 'unpublish' : 'publish';
      $img = $row->published ? 'tick.png' : 'publish_x.png';

      $task2 = $row->active ? 'unactive' : 'active';
      $img2 = $row->active ? 'tick.png' : 'publish_x.png';
?>
      <td width="10%" align="center">
        <a href="javascript: void(0);" onclick="return listItemTask('cb<?php echo $i;?>','<?php echo $task;?>')">
          <img src="images/<?php echo $img;?>" width="12" height="12" border="0" alt="" />
        </a>
      </td>
      <td width="10%" align="center">
        <a href="javascript: void(0);" onclick="return listItemTask('cb<?php echo $i;?>','<?php echo $task2;?>')">
          <img src="images/<?php echo $img2;?>" width="12" height="12" border="0" alt="" /></a>
      </td>
<?php
          $k = 1 - $k; } ?>[/spoiler]
Теперь в списке проектов появилась ещё одна колонка "Active":


2) Открываем файл /administrator/components/com_joomleague/classes/joomleague.class.php
Ищем вверху
Код
var $published;
дописываем под этим
Код
var $active;

Например НАД
Код
   // Pagenavigation
function pagenav($jl_func,$rlimit, $current='',$user='', $mode='') {
напишем такую функцию
[spoiler title=включатель/выключатель]  function active_array( $cid=null, $active=1, $myid=0 ) {
      
      if (!is_array( $cid ) || count( $cid ) < 1) {
         $this->_error = "No items selected.";
         return false;
      }
      $id = $cid[0];
      
      $this->_db->setQuery( "UPDATE $this->_tbl SET active='$active'"
      . "\nWHERE id = $id"
      );
       print $this->_db->getQuery();
      if (!$this->_db->query()) {
         $this->_error = $this->_db->getErrorMsg();
         return false;
      }
      
      if (count( $cid ) == 1) {
         $this->checkin( $cid[0] );
      }
      $this->_error = '';
   }
[/spoiler]
3) Напоследок открываем /administrator/components/com_joomleague/admin.joomleague.php
ищем
Код
    break;
 
  case 'projects':
   
    switch($task){
и ниже допишем
Код
		case 'active':
$row = new JoomLeague( $database );
$round = $row->active_array($cid, 1, $my->id);
mosRedirect(JL_ADMIN_COMPONENT_LINK."&act=$act");
break;

case 'unactive':
$row = new JoomLeague( $database );
$round = $row->active_array($cid, 0, $my->id);
mosRedirect(JL_ADMIN_COMPONENT_LINK."&act=$act");
break;

Всё. "Можете пользоваться" © Афоня.

Удачи в экспериментах, друзья!  *DRINK*
« Последнее редактирование: 05.01.2009, 16:19:28 от Yurets »
В комнате с белым потолком
*

Yurets

  • Захожу иногда
  • 405
  • 92 / 0
  • Губернатор острова Борнео
Модуль "Ближайший турнир" для JL 0.9.3
« Ответ #11 : 16.12.2008, 15:20:54 »
А вот захотелось выводить на главную ближайший турнир... А ещё чтобы, если турнир проходит в данный момент, то указывать на это.

Вот и родился модульчик.



Из настроек в админке можно указать



Ограничение, мес. — если до ближайщих соревнований, например, ещё целых полгода и не хочется, чтобы модуль все эти полгода "висел" и надоедал, то можно указать за сколько месяцев до начала турнира его отображать (от "Без ограничений" до года).

Название турнира как ссылка — выводит название проекта как ссылку в квалификацию на этот турнир.
Внимание! Ссылку нужно будет переделывать для вашего конкретного случая, т.к. уверен, что разбивка соревнований на отдельные "Квалификацию → Основную сетку → Итоговую таблицу" пока что реализована у одного меня.

Показывать дату проведения — интуитивно понятно, что в случае "Да" будет показана дата начала соревнований.

CSS класс модуля — для красоты.

Для текущего (активного) турнира надпись "БЛИЖАЙШИЙ ТУРНИР" автоматически заменяется на "ТЕКУЩИЙ ТУРНИР". По желанию, можно добавить какую-нибудь зазывающую моргающую надпись или анимацию - подкрутите в коде модуля.

Внимание! Для модуля необходимо, чтобы у проектов имелся признак "Активный". Для того, чтобы бысто добавить эту опцию ко всем проектам, необходимо выполнить действия из предыдущего моего сообщения.

В шаблоне рекомендую выводить модуль так: <?php mosLoadModules 'jlnext', -1); ?>

[вложение удалено Администратором]
В комнате с белым потолком
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Адаптация joomleague 3 под мобильную версию

Автор DragonbyKuzya

Ответов: 0
Просмотров: 3995
Последний ответ 05.03.2019, 11:57:49
от DragonbyKuzya
JoomLeague Module Matches предупреждение JFolder::folder:

Автор vladimir86

Ответов: 2
Просмотров: 4179
Последний ответ 02.01.2019, 11:04:00
от vladimir86
Всего стало по два после обновления до joomleague 3.0.22

Автор eu4ria

Ответов: 2
Просмотров: 4408
Последний ответ 29.12.2018, 05:11:32
от vladimir86
Работает ли joomleague на Joomla 3x?

Автор AlucarD

Ответов: 9
Просмотров: 7480
Последний ответ 06.10.2018, 13:12:20
от DragonbyKuzya
Восстановление удаленного проекта в JoomLeague - v.0.93

Автор saviv

Ответов: 1
Просмотров: 1973
Последний ответ 28.05.2018, 20:52:28
от lexxbry