Новости Joomla

Вышел компонент интернет-магазина HikaShop 6.1.0.Один из известных компонентов магазина для Joomla

Вышел компонент интернет-магазина HikaShop 6.1.0.Один из известных компонентов магазина для Joomla

👩‍💻 Вышел компонент интернет-магазина HikaShop 6.1.0.Один из известных компонентов магазина для Joomla.v.6.1.0 Что нового?Модуль корзины. Отображение корзины в виде offcanvas-элемента.Кнопка выхода в панели управления пользователя. Что тут сказать, просто добавили. Отправка писем только для заказов, оплаченных определёнными способами. Это удобно для рассылки сообщений, привязанных к региону или провайдеру (например, инструкции по банковскому переводу только для заказов, оплаченных банковским переводом).Листинг выплат по партнерской системе. В разделе управления партнёрскими программами появилось новое подменю «Выплаты», в котором перечислены выплаты партнёрам (упрощённое отслеживание и сверка). Добавлены настройки, благодаря которым можно определить категории товаров, на которые начисляется партнёрская комиссия с продаж.Список комплектов товаров. Система комплектов позволяет отслеживать остатки товаров, продаваемых в комплекте.Подробнее в блоге Hikashop.Поскольку мы не сообщали ранее о Hikashop 6.0, то вкратце скажем, что он вышел в июне 2025г. В новой версии было:- 13 исправлений ошибок- 17 улучшений. В частности:- - Hikashop теперь проверяет UserAgent пользователя перед добавлением товара в корзину, чтобы отсечь ботов. Ведь компонент хранит корзины в базе данных.- - улучшен роутинг компонента, позволяющий использовать в названии товара даже слеши.- - улучшения фильтра товаров - ускорение загрузки категорий/брендов/характеристик.- 4 новых функции:- - добавлена поддержка Joomla 6.0.- - Улучшена возможность адаптации форм HikaShop на фронтенде к шаблонам, не использующим стандартные классы Joomla.- - Плагин внутреннего баланса: возможность исключить уцененные товары из начисленных баллов.- - Теперь можно выбирать склады для вариантов товаров.Подробнее в Changelog Hikashop.Также при работе с Hikashop стоит учитывать, что один и тот же код поддерживает версии Joomla от 3.х до 5.х, а в таблице сравнения версий заявлена и Joomla 2.5. Беглый просмотр кода показал, что компонент как был, так и остался старым и для совместимости с Joomla 4+ просто добавлен плагин.@joomlafeed#joomla #расширения #hikashop

На сколько актуально делать сайт в 2025 году? Битва с нейросетями и выбор CMSНовый выпуск подкаста...

На сколько актуально делать сайт в 2025 году? Битва с нейросетями и выбор CMSНовый выпуск подкаста...

На сколько актуально делать сайт в 2025 году? Битва с нейросетями и выбор CMSНовый выпуск подкаста "Просто о Digital"Гость:🎙 Владимир Сергеенко ( https://t.me/aixman ) • Интернет-маркетолог с 14-летним опытом• Соавтор книги «Нетворкинг»• Спикер конференции Ассоциации директоров по развитиюВедущий:💻 Игорь Филипенко ( https://t.me/igorleee )• Программист и предприниматель с 16-летним опытом в digital• Основатель подкаста "Просто о Digital"• Специалист по автоматизации бизнес-процессовВ этом выпуске вы узнаете:🔥 Актуальность сайтов в эпоху нейросетей• Актуален ли сайт сейчас и будет ли актуален в будущем?• Зачем нужен сайт? Есть ли иные инструменты привлечения клиентов?🤖 Нейросети vs Поисковики vs Сайты• Почему нейросети не заменят сайты в B2B-сегменте• Как Google и Яндекс меняют алгоритмы из-за AI-конкуренции📊 Сайт как центр вселенной вашего трафика• Почему без сайта вы сливаете 40% маркетингового бюджета впустую?🛡 Безопасность и Joomla 6.0• Как отфильтровать 99% ботов и сэкономить на трафике• Почему Joomla теперь обходит WordPress в безопасности и скорости⚖️ Выбор платформы: битва CMS• WordPress: 50% рынка но 80% уязвимостей• Joomla: профессиональная CMS для сложных проектов• Drupal: почему его похоронили в 2023 году• Tilda: когда конструктор выгоднее CMSПриятного просмотра/прослушивания!RSS: https://cloud.mave.digital/61930Mave: https://igorfilipenko.mave.digitalЯндекс Музыка: https://music.yandex.ru/album/35840190Telegram Mave: https://t.me/mavestreambot/app?startapp=igorfilipenkoApple Podcasts: https://podcasts.apple.com/us/podcast/просто-о-digital-и-бизнесе/id1801903450ВКонтакте: https://vk.com/podcasts-12488584Youtube: https://www.youtube.com/playlist?list=PLfR6jTpnkohDDco32xZ-KyMyWi_S5Xdy2=========================Видео-формат подкаста:Rutube: https://rutube.ru/video/b5762754f9d3e0dc382f32f3034be0a2/Youtube: https://youtu.be/nu1XF2jNbxY#подкаст #podcast

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

hardstep

  • Захожу иногда
  • 76
  • 5 / 0
стоит J 1.5.20 и VM 1.1.5 неуспел доделать сайт, как уже спам валиться через форму "задать вопрос по этому товару".
на контакты поставил плагин OsolCaptcha. настроил внешний вид и все хорошо в контактах.
кто разбирается в системе работы плагинов Joomla, помогите допилить эту хорошую капчу для формы "задать вопрос по этому товару".
мои мысли по этому поводу.
плагин, как и многие имеет 2 файла osolcaptcha.php и osolcaptcha.xml, которые лежат  plugins\system.
1) во втором файле после строк:
Код
<param name="enableForContactUs" type="radio"  label="Auto add in  Contact Us form?" description="If it is a customized contact us form by editing the HTML or because of template override ,the captcha may not auto add even if you enable tthis"  default="Yes">
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </param>
добавляю строки
Код
<param name="enableForVirtueMartAsk" type="radio"  label="Auto add in  VirtueMartAsk?" description="add in  VirtueMartAsk"  default="Yes">
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </param>
это даст отображение нового параметра в администрировании плагина
2) в osolcaptcha.php находится весь функционал плагина, который реализован через переменные и следующие функции
насколько понял, в плагине реализован механизм подмены кнопки(для которой нужна проверка капчей) таблицей с капчей и такой же кнопкой.
display - не понял, что делает, но похоже модификации не требует
setColors  - что-то делает с цветами, модификации не требует
create_imageAdv - делает капчу с размазанными буквами, модификации не требует
create_imagePlane  - делает капчу с неразмазанными буквами, модификации не требует
confirm - небольшая функция, не понял, что делает
onCaptcha_Display  - небольшая функция, не понял, что делает
onCaptcha_confirm  - небольшая функция, не понял, что делает
GetCapthcaHTML - функция генерирует HTML код самой CAPTCHA
getIsEnabledForForms - небольшая функция, модификации не требует
changeMod - небольшая функция, модификации не требует
onAfterRender - функция с одной строчкой global $mainframe;, модификации не требует
onShowOSOLCaptcha  - функция с одной строчкой, модификации не требует
HexToRGB - что-то делает с цветами, модификации не требует
RGBToHex - что-то делает с цветами, модификации не требует
botscoutCheck - для сервиса botscout, модификации не требует
mailBotScoutResult - для сервиса botscout, модификации не требует

onAfterDispatch - большая функция, ТРЕБУЕТ МОДИФИКАЦИИ
getEnabledForms  - небольшая функция, которая задает массив со строками кода, которые нужно искать, чтобы заменить качпей, ТРЕБУЕТ МОДИФИКАЦИИ
onAfterRoute - большая функция, ТРЕБУЕТ МОДИФИКАЦИИ
« Последнее редактирование: 17.10.2010, 21:47:37 от hardstep »
*

hardstep

  • Захожу иногда
  • 76
  • 5 / 0
спасибо всем за помощь. проблема решена:

1) в файл language/ru-RU/ru-RU.ini
в любую новую строчку вставляем
SEND_BUTTON=Отправить

2) в файле plugins/system/osolcaptcha.php
функцию onAfterRoute
заменяем следующим кодом
Код
function onAfterRoute()
    {
        global $mainframe;
        //$this->botscoutCheck();
        JPlugin::loadLanguage( 'plg_system_osolcaptcha', JPATH_ADMINISTRATOR );
        //showCaptcha=True;
        $showCaptcha = JRequest::getVar('showCaptcha');
        if($showCaptcha == 'True')
        {
            return $this->display();
        }
    
        $return = false;
        $osolCatchaTxt = JRequest::getVar('osolCatchaTxt','');
        $osolCatchaTxtInst = JRequest::getVar('osolCatchaTxtInst','');
        

        /*$mainframe->triggerEvent('onCaptcha_confirm', array($osolCatchaTxt, &$return));
        if(!$return)*/
        //if(isset($_REQUEST[JUtility::getToken()])&& !$this->confirm($osolCatchaTxt))
        $option = JRequest::getVar('option');
        $task = JRequest::getVar('task');
        //$this->mailBotScoutResult();
        
        /**********************************************SECOND LEVEL SECURITY CHECK*******************************************************************/
            $secondLevelPass = true;
            $plugin     =& JPluginHelper::getPlugin('system', 'osolcaptcha');
            $this->params       = new JParameter($plugin->params);

            if(
               (
                ($option == 'com_contact' && $task=='submit')||
                ($option == 'com_user' && isset($_REQUEST['task']) && $task != 'logout' )
               ) &&
               $this->params->get("enableSecondLevelSecurity") == 'Yes' &&
               ($osolCatchaTxtInst == '' || $osolCatchaTxt == '')
              )
            {
                

                $isEnabledForForm = $this->getIsEnabledForForms();
                                
                switch($option)
                {
                    case 'com_contact':
                        if($isEnabledForForm["enableForContactUs"])
                        {
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        
                        break;
                    case 'com_virtuemart':
                        if($isEnabledForForm["enableForVirtueMartAsk"])
                        {
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        
                        break;
                    case 'com_user':
                        
                        if(JRequest::getVar('task') == 'login'  && $isEnabledForForm["enableForComLogin"])
                        {
                            JRequest::setVar('view','login');
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        if(JRequest::getVar('task') == 'register_save'   && $isEnabledForForm["enableForRegistration"])
                        {
                            JRequest::setVar('view','register');
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        if(JRequest::getVar('task') == 'remindusername'   && $isEnabledForForm["enableForRemind"])
                        {
                            JRequest::setVar('view','remind');
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        if(JRequest::getVar('task') == 'requestreset'   && $isEnabledForForm["enableForReset"])
                        {
                            JRequest::setVar('view','reset');
                            JRequest::setVar('task','');
                            $secondLevelPass = false;
                        }
                        
                        
                        
                        break;
                }

                if(!$secondLevelPass)
                {
                    $this->reportBotscoutNegativeMail  = $this->params->get('reportBotscoutNegativeMail',$this->reportBotscoutNegativeMail);
                    if($this->reportBotscoutNegativeMail   !='')
                    {
                        $this->mailBotScoutResult();
                    }
                    JError::raiseWarning("666",JTEXT::_('OSOLCAPTCHA_ERROR_MESSAGE'));
                }
                
            }
        if(in_array($option,array('com_contact','com_user', 'com_virtuemart')) && (isset($_REQUEST['task'])&& $task != 'logout' ) && (isset($_REQUEST['osolCatchaTxt']) && !$this->confirm($osolCatchaTxt,$osolCatchaTxtInst)))//."$osolCatchaTxt,$osolCatchaTxtInst".JFactory::getSession()->get('securiy_code'.$osolCatchaTxtInst)
        {
            JError::raiseWarning("666",JTEXT::_('OSOLCAPTCHA_ERROR_MESSAGE'));
            switch($option)
            {
                case 'com_contact':
                    JRequest::setVar('task','');
                    
                    break;
                case 'com_virtuemart':
                    JRequest::setVar('task','');
                    
                    break;
                case 'com_user':
                    
                    if(JRequest::getVar('task') == 'login')
                    {
                        JRequest::setVar('view','login');
                    }
                    if(JRequest::getVar('task') == 'register_save')
                    {
                        JRequest::setVar('view','register');
                    }
                    if(JRequest::getVar('task') == 'remindusername')
                    {
                        JRequest::setVar('view','remind');
                    }
                    if(JRequest::getVar('task') == 'requestreset')
                    {
                        JRequest::setVar('view','reset');
                    }
                    
                    
                    JRequest::setVar('task','');
                    break;
            }
            
        }
        elseif(isset($_REQUEST['osolCatchaTxt']) && !$this->confirm($osolCatchaTxt,$osolCatchaTxtInst))
        {
            JError::raiseWarning("666",JTEXT::_('OSOLCAPTCHA_ERROR_MESSAGE').JTEXT::_('OSOL_CAPTCHA_GO_BACK'));
            $mainframe->redirect(JURI::base());
        }
        else
        {
            $this->botscoutCheck();
        }
        //admin passphrase check
        //$pathArray = explode("/",JURI::base());
        $pathArray = preg_split("~/~",JURI::base());//fix provided by Gruz from ukraine on 5th september 2010

        
        $isAdmin = ($pathArray[(count($pathArray) - 2)] == "administrator");
        
        if($isAdmin  )
        {
            $currentSession =  & JFactory::getSession() ;//&JSession::getInstance('none',array());
            $sessOsolAdminPassPhrase = $currentSession->get('osolAdminPassPhrase','');
            $paramOsolPassPhrase =$this->params->get("adminPassPhrase");
            $osolPP = JRequest::getVar('osolPP','');
            if(($paramOsolPassPhrase !='') && ( $sessOsolAdminPassPhrase != $paramOsolPassPhrase)  &&  ($osolPP!= $paramOsolPassPhrase ) )
            {
                $liveSiteUserSide  = str_replace("/administrator/","/",JURI::base());
                $mainframe->redirect($liveSiteUserSide);
                
            }
            elseif($osolPP == $paramOsolPassPhrase )
            {
                
                $currentSession->set('osolAdminPassPhrase',$osolPP);
            }
        }
    }

3) в файле plugins/system/osolcaptcha.php
функцию getEnabledForms
заменяем следующим кодом
Код
function getEnabledForms()
{
return array(
"enableForContactUs" => '<button class="button validate" type="submit">',
"enableForVirtueMartAsk" => '<input type="button" name="send" value="'. JTEXT::_('SEND_BUTTON').'" class="button" onclick="validateEnquiryForm()" />',

"enableForComLogin"  => '<input type="submit" name="Submit" class="button" value="'.JTEXT::_('LOGIN').'" />',
"enableForRegistration" => '<button class="button validate" type="submit">'.JTEXT::_('REGISTER').'</button>',
"enableForReset" => '<button type="submit" class="validate">'.JText::_('Submit').'</button>',
"enableForRemind" => '<button type="submit" class="validate">'.JText::_('Submit').'</button>',
);
}

4) в файле plugins/system/osolcaptcha.php
функцию onAfterDispatch
заменяем следующим кодом
Код
function onAfterDispatch()
    {
$document = &JFactory::getDocument();//
$content = $document->getBuffer('component');
$option = JRequest::getVar('option');
$view = JRequest::getVar('view');
$captchaHTML = $this->GetCapthcaHTML();
$plugin =& JPluginHelper::getPlugin('system', 'osolcaptcha');
 
$enabledForms = $this->getEnabledForms();
$isEnabledForForm = $this->getIsEnabledForForms();

$newContent = "";
if(in_array($option,array('com_contact','com_user', 'com_virtuemart')))
{
switch($option)
{
case 'com_contact':
//$checkContent = '<button class="button validate" type="submit">';
if($isEnabledForForm["enableForContactUs"])
{
$checkContent = $enabledForms["enableForContactUs"];
}
break;

case 'com_virtuemart':
//$checkContent = '<button class="button validate" type="submit">';
if($isEnabledForForm["enableForVirtueMartAsk"])
{
$checkContent = $enabledForms["enableForVirtueMartAsk"];
// echo 'CHECK CONTENTSSSSS'. $checkContent;
}
break;

case 'com_user':
switch($view)
{
case 'register':
if($isEnabledForForm["enableForRegistration"])
{
$checkContent = $enabledForms["enableForRegistration"];

}
//$checkContent = array('<button class="button validate" type="submit">'.JTEXT::_('REGISTER').'</button>','<input type="submit" name="Submit" class="button" value="'.JTEXT::_('LOGIN').'" />');
break;
case 'login':
if($isEnabledForForm["enableForComLogin"])
{
$checkContent = $enabledForms["enableForComLogin"];

}
break;
case 'remind':
//echo $isEnabledForForm["enableForComRemind"]
if($isEnabledForForm["enableForRemind"])
{
$checkContent = $enabledForms["enableForRemind"];


}
break;
case 'reset':
if($isEnabledForForm["enableForReset"] && JRequest::getVar('layout','') == '')
{
$checkContent = $enabledForms["enableForReset"];

}
break;

}

break;
}

$newContent = str_replace($checkContent,$captchaHTML.$checkContent,$content);
}
if($newContent!="")
{
$document->setBuffer($newContent,'component');
}

//now check for login module,add the possition here if the login module is not in any of the following
$plugin =& JPluginHelper::getPlugin('system', 'osolcaptcha');
   $this->params   = new JParameter($plugin->params);
if($this->params->get('enableForModules') == 'Yes')// && $option!= 'com_user')
{
foreach(array('left','right','top','user2','user3') as $pos)
{


$modContent = $document->getBuffer('modules',$pos);
$loginModuleSearch ='<input type="submit" name="Submit" class="button" value="'.JTEXT::_('LOGIN').'" />';

if(strstr($modContent,$loginModuleSearch)!=false)
{
//echo $pos.'true<br />';

$modContent = str_replace($loginModuleSearch ,$this->GetCapthcaHTML(true).$loginModuleSearch,$modContent);


$document->setBuffer($modContent ,'modules',$pos);


}

//echo "onAfterDespatch()<br />";
//echo "<pre>";print_r($modloginContent);echo "</pre>";
}
}
    }
5) в файле
components/com_virtuemart/themes/default/templates/product_details/flypage.tpl.php
(вместо flypage.tpl.php может быть та страница товара, которая указана в настройках магазина VM или категории товаров)
строчку
Код
<input type="button" name="send" value="<?php echo $VM_LANG->_('SEND_BUTTON')?>" class="button" onclick="validateEnquiryForm()" />    
заменяем на
Код
<input type="button" name="send" value="<?php echo JText::_('SEND_BUTTON')?>" class="button" onclick="validateEnquiryForm()" />

6) в файле plugins/system/osolcaptcha.xml
после строк:
Код
<param name="enableForContactUs" type="radio"  label="Auto add in  Contact Us form?" description="If it is a customized contact us form by editing the HTML or because of template override ,the captcha may not auto add even if you enable tthis"  default="Yes">
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </param>
добавляем строки
Код
<param name="enableForVirtueMartAsk" type="radio"  label="Auto add in  VirtueMartAsk?" description="add in  VirtueMartAsk"  default="Yes">
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </param>

быть может в решении есть неточности или лишние действия, но оно работает на J 1.5.10 + VM 1.1.5
если Вам понравилось или пригодилось решение, то жмите на "+" под моим ником слева
« Последнее редактирование: 17.10.2010, 21:49:22 от hardstep »
*

Вованище

  • Захожу иногда
  • 134
  • 20 / 0
  • <target = blank>
Цитировать
быть может в решении есть неточности или лишние действия, но оно работает на J 1.5.10 + VM 1.1.5
если Вам понравилось или пригодилось решение, то жмите на "+" под моим ником слева
Да уж - лишние действия. Инструкции разработчика читать не пробовал?
Достаточно в форму добавить этот код:
Код
<?php 
global $mainframe;
//set the argument below to true if you need to show vertically( 3 cells one below the other)
$mainframe->triggerEvent('onShowOSOLCaptcha', array(false));
?>
*

nik_neman

  • Захожу иногда
  • 52
  • 2 / 0
Был вопрос - разобрался сам.
« Последнее редактирование: 19.10.2011, 11:54:58 от nik_neman »
*

Meronix

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Да уж - лишние действия. Инструкции разработчика читать не пробовал?
Достаточно в форму добавить этот код:
Код
<?php 
global $mainframe;
//set the argument below to true if you need to show vertically( 3 cells one below the other)
$mainframe->triggerEvent('onShowOSOLCaptcha', array(false));
?>



А в какой файл его надо добавить?
*

bri_man

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Продолжу тему про OsolCaptcha. Создал модуль с формой. Аналогично хочу прикрутить капчу. Саму капчу вывел - проблем не возникло.
Но, как сделать, чтобы форма не отправлялась, пока не заполнен код CAPTCHA?
Смотрел html-код, который вставляет osolCapcha - никаких проверок там нет.
Подозреваю, что проверку осуществляет Joomla, и возможно исходя из классов, прописанных в тегах (form,input,textarea).
Но, чето не пойму как. Возможно, что - то в форму нужно добавить, но что?

У меня эта CAPTCHA работает на форме контактов. Практически аналогично оформил свою, но без результата.

Т. е. побольшому счету, для начала вообще понять бы как Joomla проверяет заполнение формы, например отправки в стандартных контактах.

hardstep, можешь дать код функции validateEnquiryForm() из кнопки
Код
<input type="button" name="send" value="<?php echo JText::_('SEND_BUTTON')?>" class="button" onclick="validateEnquiryForm()" />
?
« Последнее редактирование: 29.01.2012, 19:22:12 от bri_man »
*

bri_man

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Разобрался. Для вызова стандартной валидации формы, нужно дописать
Код
JHTML::_('behavior.formvalidation');
и установить у формы class="form-validate" и у обязательных полей class="inputbox required"
« Последнее редактирование: 29.01.2012, 21:41:18 от bri_man »
*

Иоланта

  • Захожу иногда
  • 166
  • 3 / 0
а у меня другая проблема. Может кто сталкивался с интеграцией osolcaptcha и ck forms?

У меня вообще плагин везде прекрасно работает (не только в форме авторизации и т.д.), но т.к. пользуюсь разными формами на сайте, CAPTCHA везде по-разному выглядит, решила убрать стандартную капчу из ck forms, заменить на osol, все появилось, но при отправке формы выдается системное сообщение, что код введен неправильно.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Помогите мне поместить полем SKU под Описание Продукта browse_listtable.tpl.php

Автор saudzboa

Ответов: 1
Просмотров: 1314
Последний ответ 14.02.2018, 22:44:25
от saudzboa
Не могу убрать форму "Задайте вопрос..." на странице товара

Автор abrodski

Ответов: 1
Просмотров: 1777
Последний ответ 20.05.2014, 14:30:44
от abrodski
Вопрос по setPageTitle

Автор holovla

Ответов: 4
Просмотров: 1741
Последний ответ 26.04.2013, 22:20:00
от holovla
Задать вопрос о товаре в popup окне

Автор newjey

Ответов: 1
Просмотров: 1795
Последний ответ 18.04.2013, 17:02:44
от newjey
кнопка в описании товара "Задайте вопрос по этому товару". Защита от спама

Автор Karolinus

Ответов: 40
Просмотров: 15827
Последний ответ 08.02.2013, 13:54:39
от secur