Новости Joomla

Собственные макеты вывода для пользовательских полей JoomlaМы привыкли использовать механизм...

Собственные макеты вывода для пользовательских полей JoomlaМы привыкли использовать механизм...

Собственные макеты вывода для пользовательских полей JoomlaМы привыкли использовать механизм переопределения макетов Joomla: скопируй нужный тебе файл макета в папку

html шаблона и твори там что хочешь. Это в полной мере относится и к пользовательским полям Joomla.Joomla ищет макеты рендера всех пользовательских полей в следующем порядке:- Есть ли файл
templates/[template name]/html/layouts/[component name]/fields/render.php , переопределяющий макет вывода полей для конкретного компонента? Да - используем его.- Нет? Есть ли файл
components/[component name]/layouts/fields/render.php в папке компонента? Да - используем его.- Нет? Есть ли файл
templates/[template name]/html/layouts/com_fields/fields/render.php, переопределяющий вывод полей для
com_fields? Да - используем его.- Нет? Используем файл
components/com_fields/layouts/fields/render.phpЭто механизм поиска переопределений файлов макетов. Вчера столкнулся с тем, что если поле вставлено в текст материала с помощью шорт-кода (кнопкой редактора) вида
{field 25}, то переопределения не сработали. Поэтому стал вспоминать как сделать свой макет для поля Joomla. Файл
components/com_fields/layouts/field/render.php копируем в
templates/YOUR_TEMPLATE/html/layouts/com_fields/field/etapy-raboty-nad-proektom.php. Обратите внимание, что мы файл переименовали, чтобы в настройках поля видеть его в выпадающем списке. После этого всё заработало как надо. Благо, переводил уже раньше статью
Как происходит рендер пользовательских полей в Joomla?. Потом, порывшись по своему же переводу увидел, что эта особенность работы Joomla в статье уже в ней описана 😂. А также напомнил себе о возможности указывать макет поля прямо в шорт-коде, через запятую:
{field 25,etapy-raboty-nad-proektom}. Правда, если честно, никогда этой возможностью не пользовался. @webtolkru#joomla #php #разработка #webdev

Вышел JoomShoppping 5.6.0Один из популярных компонентов интернет-магазина на Joomla. v.5.6.0

Вышел JoomShoppping 5.6.0Один из популярных компонентов интернет-магазина на Joomla.👩‍💻 v.5.6.0. Что нового?- Добавлена ​​сортировка товаров для конкретной категории- Параметры
count_products_to_page /
count_products_to_row - по умолчанию теперь пустые (используется из конфигурации)- Добавлена сортировка для налогов- Добавлена форма поиска в списке стран- Добавлен фильтр только не завершенных заказов для списка заказов (не закончен: скрывать / показывать / все)- Добавлены состояния опубликовано / не опубликовано для аддонов (опции - дополнения)- Добавлены зависимости (dependencies) для аддонов- ⚠️ Библиотека Tcpdf удалена из ядра Joomshopping. Генерация PDF счетов отключена по умолчанию. Библиотека теперь устанавливается как дополнение Lib TcPdf.- ➕ Новая опция. Техническое обслуживание для дополнений (отладка, журнал, переопределения папок)- ➕ Новая опция: Настройки - Другие - Использовать WebAssetManager. - ➕ Новая опция: Настройки - Другие - Администратор продукты Поиск по словам. Поиск в админке будет искать по описаниям товаров.- Обновлены иконки в админке- ➕ Новая опция конфигурации check_valid_productpage_attribute- ➕Новая опция конфигурации attribut_dep_sorting_in_product_dir- ➕Новая опция конфигурации attribut_nodep_sorting_in_product_dir- ➕Новый метод
prepareSaveParams для ShippingFormRoot (разработчикам способов доставки)- Добавлены новые триггеры для плагинов- Обновление HttpClientLite- Исправления роутера- Исправлен выбор оформления заказаНужно помнить, что не все опции конфигурации JoomShopping доступны для настройки из панели администратора. Некоторые параметры можно изменить только в файлe
components/com_jshopping/config/user_config.php (переопределение
default_config.php). Так же параметры конфигурации могут быть изменены плагинами на события
onBeforeLoadJshopConfig и
onLoadJshopConfig.
Страница расширения#JoomShopping

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

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Есть сайт1, на нем есть компонент с фронт-вьюхой: сайт1.ру/index.php?option=com_mycomponent&view=myview
Есть сайт2, где в модуле выводится вьюха компонента с первого сайта с &tmpl=component
Как внутри myview можно определить URL сайт2?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
parent.document.URL
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Сори, не понял, чуточку подробнее можно?
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
а без js никак не получится?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Подозреваю что нет )
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Пичаль. Просто вьюха специально предназначена для вывода на другом сайте. Необходимо сначала получить URL сайт2, затем проверить реквест на наличие пары параметров, а уж потом решать, выводить контент вьюхи или нет. Как-либо реально?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
С первого сайта делаем file_get_conten, и передаем url отдаем ссылку и через echo выводим фрейм
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Если честно, не понял.
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
В общем-то, решил: в шаблоне вьюхи проверяю реквест на наличие параметров и если они существуют и tmpl == component, то выводим контент, иначе принудительный вызов 500.
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
И все же про file_get_contens() хотелось бы подробнее, не понял из описания, как я могу применять это во вьюхе компонента
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
И все же про file_get_contens() хотелось бы подробнее, не понял из описания, как я могу применять это во вьюхе компонента
Можно передать разные параметры и считать их в вызываемой страничке, если в этом задача.
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Про передать - это понятно, но мне не передать надо, а получить: я не знаю заранее адреса второго сайта, где во фрейм будет вызываться вьюха, а именно это и является конечной целью.
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Или я туплю или изначально ТЗ неправильно подал.
Как можно передать то, чего не знаешь?
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Блин, примерчик тогда что ли...
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
сайт2 - твой?
Если да, то что мешает модифицировать вызов странички с сайта1?
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Нет, сайт2 - не мой, и вообще не на J. Сайтов типа 2 может быть много. Показывать вьюху в их фреймах надо только разрешенным.
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Во, то, что надо! В форме прям в скрытое поле забабахал:
Код: php
<input type="hidden" name="part_url" value="<?php echo $_SERVER['HTTP_REFERER']; ?>">
Спс!
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Споткнулся на следующем:
Во вьюхе форма, в view.html.php перед parent::display($tpl); есть код:
Код: php
     $d_server = parse_url($_SERVER['HTTP_REFERER']);
      $d_server = (string)$d_server['host'];
при первичном открытии страницы сайт2 с вьюхой во фрейме $d_server == 'сайт2'
при сабмите формы $d_server == 'сайт1', это как-либо побеждается?
« Последнее редактирование: 29.01.2015, 23:56:27 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Возможно, что это из-за того, что контроллер компонента, обрабатывая результат сабмита формы, возвращает JFactory::getURI();, полученный перед началом обработки?
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Вводная: партнерка с формой, форму показываем только разрешенным сайтам, которым выдан ключ доступа (адреса и ключи в базе хранятся). Та же самая форма показывается на сайте-родителе, но в другом виде (отличается верстка).

Чтобы победить гемор с обработкой формы, пришлось изобрести следующий велосипед:
view.html.php:
Код: php
      $d_server = parse_url($_SERVER['HTTP_REFERER']);
      $d_server = (string)$d_server['host'];
      $l_server = parse_url(JUri::base());
      $l_server = (string)$l_server['host'];
      $input = JFactory::getApplication()->input;
      $partner = $input->getString('server','');
      $is_base = ($d_server == $l_server) && ($partner == '');
      $this->displaymode = 0;
      if (!$is_base) {
        if ($partner != '')
          $d_server = $partner;
        $tmpl = $input->getString('tmpl','');
        $key = $input->getString('key','');
        $db = JFactory::getDBO();
        $keybase = $db->setQuery('select key from #__table where url = '.$db->quote($d_server))->loadResult();
        $this->displaymode = ($tmpl == 'component' && $key == $keybase)? 1 : 2;
      }
     
      parent::display($tpl);

шаблон вьюхи:
Код: php-brief
$ukpb = ($this->displaymode == 0)? ' uk-panel uk-panel-box' : ' rqformpart';
if ($this->displaymode == 2) {
  JError::raiseError(500, 'Restrict access');
} else {
  // тут вывод формы
  // в форме присутствует поле: <input type="hidden" name="partner" value="<?php echo $_SERVER['HTTP_REFERER']; ?>" />
}

в контроллере, в таске, на который форма ссылается:
Код: php
    $uri = $_SERVER['HTTP_REFERER'];
    $p_server = parse_url($this->input->getString('partner'));
    $d_server = (string)$p_server['host'];
    $l_server = parse_url(JUri::base());
    $l_server = (string)$l_server['host'];
    $server = ''// это нужно - в запросе участвует
    if ($d_server != $l_server) {
      $uri .= '&server='.$d_server;
      $server = $d_server;
    } else {
      parse_str((string)$p_server['query'], $d_params);
      $server = (string)$d_params['server'];
    }

// тут обработка формы

    $this->setRedirect(JRoute::_($uri));

Это какому-либо рефакторингу поддается? Или совсем все плохо...
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
А как вообще правильно сделать защищенную форму-партнерку, чтобы можно было ее использовать только разрешенным?
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Вопрос решен. Решил обойтись вышеприведенным г-кодом.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
У меня единственное предложение. Называйте переменные наиболее понятным образом, если l_server - это локальный сервер, то лучше назвать его local_server. Сейчас много копаюсь с чужим ***кодом (к вашему не относится ни в коей мере), так тамглавная проблема осознать что переменная обозначает. Чем понятнее переменная названа,  тем легче с ней работать.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Как-то так
Код: php-brief
$d_server=parse_url($_SERVER['HTTP_REFERER'],PHP_URL_HOST);
$l_server=parse_url(JUri::base(),PHP_URL_HOST);
$input=JFactory::getApplication()->input;
$partner=$input->getString('server','');
if($d_server==$l_server && $partner==''){
$this->displaymode=0;
}elseif($partner!=''){
$db=JFactory::getDBO();
$keybase=$db->setQuery('select key from #__table where url='.$db->quote($partner))->loadResult();
$this->displaymode=($input->getString('tmpl','')=='component' && $input->getString('key','')==$keybase)? 1:2;
}

parent::display($tpl);
Код: php-brief
$uri=$_SERVER['HTTP_REFERER'];
$d_server=parse_url($this->input->getString('partner'),PHP_URL_HOST);
$l_server=parse_url(JUri::base(),PHP_URL_HOST);
$server=''// это нужно - в запросе участвует
if ($d_server!=$l_server) {
$uri.='&server='.$d_server;
$server=$d_server;
} else {
parse_str((string)$p_server['query']);//если присуствует параметр server, он и так присвоится переменной $server
}
// тут обработка формы
$this->setRedirect(JRoute::_($uri));
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Код: php
$d_server=parse_url($_SERVER['HTTP_REFERER'],PHP_URL_HOST);
$l_server=parse_url(JUri::base(),PHP_URL_HOST);
С этим согласен.

Код: php
if($d_server==$l_server && $partner==''){
$this->displaymode=0;
}elseif($partner!=''){
$db=JFactory::getDBO();
$keybase=$db->setQuery('select key from #__table where url='.$db->quote($partner))->loadResult();
$this->displaymode=($input->getString('tmpl','')=='component' && $input->getString('key','')==$keybase)? 1:2;
}
С этим можно поспорить, т.к. 3 переменные по сути ничего не весят, их создание и чтение также времени не отнимают (0,0000000001 CP?) Зато понизилась читабельность кода.

Второй кусок:
Код: php
$uri=$_SERVER['HTTP_REFERER'];
$d_server=parse_url($this->input->getString('partner'),PHP_URL_HOST);
$l_server=parse_url(JUri::base(),PHP_URL_HOST);
$server='';  // это нужно - в запросе участвует
if ($d_server!=$l_server) {
$uri.='&server='.$d_server;
$server=$d_server;
} else {
parse_str((string)$p_server['query']); //если присуствует параметр server, он и так присвоится переменной $server
}
// тут обработка формы
$this->setRedirect(JRoute::_($uri));
$p_server откуда взялся? может, тогда уж сразу
Код: php
parse_str((string)parse_url($this->input->getString('partner'))['query']); ?

Поначалу parse_str((string)$p_server['query']); у меня возвращал null, тогда как через переменную работал нормально. Сейчас работает в любом случае, хз, что это было...
« Последнее редактирование: 03.02.2015, 00:04:44 от AlekVolsk »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
$p_server откуда взялся? может, тогда уж сразу
ну или так
Код: php-brief
parse_str(parse_url($this->input->getString('partner'),PHP_URL_QUERY));
Экономии мало, чисто эксперимент над кодом ^-^.
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Баг. В модуле выводится значение параметра из другого модуля

Автор fbr

Ответов: 10
Просмотров: 710
Последний ответ 18.04.2021, 21:34:10
от fbr
[Решено] Узнать какие плагины загружены

Автор lexx006

Ответов: 3
Просмотров: 1896
Последний ответ 20.07.2015, 09:55:54
от lexx006
Как узнать количество запросов к бд?

Автор indigo

Ответов: 1
Просмотров: 1585
Последний ответ 31.07.2013, 23:39:35
от smart
Как с помощью jquery или javascript узнать зашол ли некий обьект за скрол или нет?

Автор kontrast

Ответов: 0
Просмотров: 1378
Последний ответ 26.02.2013, 18:45:35
от kontrast