Получение значения радиокнопки в модуле

  • 11 Ответов
  • 290 Просмотров

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

*

DeadMorose

  • Новичок
  • *
  • 6
  • 0
Помогите, совсем уже голову сломал  :(
шаблон от RocketTheme на Gantry4

Изменил модуль регистрации, юр. лицо вносит данные ОГРН, а физ. лицо вносит данные СНИЛС.

Теперь при авторизации (mod_login, default.php - через переопределение):

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

т.е. при <input type="radio" name="Client" value="СНИЛС" checked="">
нужен СНИЛС в  placeholder <input id="modlgn-username" type="text" name="username" class="input-small" tabindex="0" size="18" placeholder="СНИЛС" />

а при при <input type="radio" name="Client" value="ОГРН" checked="">
нужен ОГРН в  placeholder <input id="modlgn-username" type="text" name="username" class="input-small" tabindex="0" size="18" placeholder="ОГРН" />

Уже есть два работающих кода в javascript и jquery. Однако если я его подставляю через script, то ничего не работает. Выяснил, что javascript нужно вставлять через:
$document = JFactory::getDocument();
$document->addScript('/js/Change_placeholder.js');

но сайт ложится с ошибкой 500.

я бы вообще не заморачивался с Javascript, сделал бы проще через php. Сделал бы условие, что при одном value радиокнопки вывелся бы input с одним placeholder, а при другом значении value, отобразился бы другой input с placeholder. Но никак не могу определить каким методом получить value из радиокнопки.

В общем вопросы, как создать переменную со значением value из радиокнопки? и как правильно подключит скрипт?


Сам код (начало):

<?php
defined('_JEXEC') or die;

JLoader::register('UsersHelperRoute', JPATH_SITE . '/components/com_users/helpers/route.php');

JHtml::_('behavior.keepalive');
JHtml::_('bootstrap.tooltip');

?>
<form action="<?php echo JRoute::_('index.php', true, $params->get('usesecure')); ?>" method="post" id="login-form" class="form-inline">
   <?php if ($params->get('pretext')) : ?>
      <div class="pretext">
         <p><?php echo $params->get('pretext'); ?></p>
      </div>
   <?php endif; ?>
   <div class="userdata">
      <div class="form-group">
           <div class="radio">
             <label>              
               <input type="radio" name="Client" value="FL" checked="">
               Физическое лицо
             </label>               
           </div>
           <div class="radio">
             <label>
               <input type="radio" name="Client" value="YL">
               Юридическое лицо
             </label>
           </div>
       </div>
      <div id="form-login-username" class="control-group">
         <div class="controls">
            <?php if (!$params->get('usetext')) : ?>
               <div class="input-prepend">
                  <span class="add-on">
                     <span class="icon-user hasTooltip" title="<?php echo JText::_('MOD_LOGIN_VALUE_USERNAME')?>"></span>
                     <label for="modlgn-username" class="element-invisible"><?php echo JText::_('MOD_LOGIN_VALUE_USERNAME'); ?></label>
                  </span>
                  <input id="modlgn-username" type="text" name="username" class="input-small" tabindex="0" size="18" placeholder="СНИЛС" />
               </div>
            <?php else: ?>
               <label for="modlgn-username"><?php echo JText::_('MOD_LOGIN_VALUE_USERNAME')?></label>
               <input id="modlgn-username" type="text" name="username" class="input-small" tabindex="0" size="18" placeholder="СНИЛС" />
            <?php endif; ?>
         </div>
      </div>
« Последнее редактирование: 26.12.2016, 06:56:18 от DeadMorose »

*

ProtectYourSite

  • Живу я здесь
  • ******
  • 849
  • 48
Если через php, то нужно через com_ajax передавать значения кнопки и обратно отдавать результат.
И скрипты бы я подключал с указанием более точных путей, типо:
Код
$document = JFactory::getDocument();
$document->addScript(JURI::base().'modules/'.$module->module.'/js/Change_placeholder.js');

*

DeadMorose

  • Новичок
  • *
  • 6
  • 0
Прошу помочь на таком примере кода. В чём неправилен синтаксис для Joomla?
решил сделать скрытые блоки, при выборе радиокнопки.

(код сократил по максимуму, оставил только необходимое для понимания).

хочу оформить всё в одном файле модуля mod_login (переопределенный default.php):

<?php

defined('_JEXEC') or die;

JLoader::register('UsersHelperRoute', JPATH_SITE . '/components/com_users/helpers/route.php');

JHtml::_('behavior.keepalive');
JHtml::_('bootstrap.tooltip');

//вставляю код javascript

$doc =& JFactory::getDocument();
$doc->addScriptDeclaration(
function Selected(a) {
  var label = a.value;
    if (label=="FL") {
       document.getElementById("Block1").style.display='block';
       document.getElementById("Block2").style.display='none';      
   } elseif (label=="YL") {
       document.getElementById("Block1").style.display='none';
       document.getElementById("Block2").style.display='block';
   }
}
);
?>
<form action="<?php echo JRoute::_('index.php', true, $params->get('usesecure')); ?>" method="post" id="login-form" class="form-inline">
           <div class="radio">
               <label>              
                  <input type="radio" name="Client" onchange="Selected(this)" value="FL" checked="">
                  Физическое лицо
               </label>               
           </div>
           <div class="radio">
               <label>
                  <input type="radio" name="Client" onchange="Selected(this)" value="YL">
                  Юридическое лицо
               </label>
           </div>
         <div id="Block1" style='display: block;'>
            <input id="modlgn-username" type="text" name="username" class="input-small" tabindex="0" size="18" placeholder="СНИЛС" />
         </div>

         <div id="Block2" style='display: none;'>
            <input id="modlgn-username" type="text" name="username" class="input-small" tabindex="0" size="18" placeholder="ОГРН" />
         </div>
</form>

*

robert

  • Профи
  • ********
  • 4002
  • 371
Забыли кавычки для аргумента функции addScriptDeclaration().
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

DeadMorose

  • Новичок
  • *
  • 6
  • 0
Забыли кавычки для аргумента функции addScriptDeclaration().

Пробовал, но sublimetext весь код в кавычках желтым отмечает. Да и здесь не кавычек https://docs.joomla.org/JDocument/addScriptDeclaration

*

DeadMorose

  • Новичок
  • *
  • 6
  • 0
или другой вариант.

вот тут код JQuery:
https://jsfiddle.net/Lxx402nt/

как мнеправильно в модуль его поместить?

*

robert

  • Профи
  • ********
  • 4002
  • 371
Пробовал, но sublimetext весь код в кавычках желтым отмечает. Да и здесь не кавычек https://docs.joomla.org/JDocument/addScriptDeclaration
Где "не кавычек"? И что такое sublimetext?
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

DeadMorose

  • Новичок
  • *
  • 6
  • 0
Где "не кавычек"? И что такое sublimetext?

Sublime Text 3 - редактор кода у меня.

Пробовал так:
$doc->addScriptDeclaration("
function Selected(a) {
  var label = a.value;
    if (label=="FL") {
       document.getElementById("Block1").style.display='block';
       document.getElementById("Block2").style.display='none';       
   } elseif (label=="YL") {
       document.getElementById("Block1").style.display='none';
       document.getElementById("Block2").style.display='block';
   }
}
");

*

robert

  • Профи
  • ********
  • 4002
  • 371
Пробовал так:
$doc->addScriptDeclaration("
function Selected(a) {
...
    if (label=="FL") {
...
");
Экранируйте кавычки или используйте кавычки другого типа. Вам стоит освоить азы, чтобы не задавать элементарных вопросов.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

DeadMorose

  • Новичок
  • *
  • 6
  • 0
Экранируйте кавычки или используйте кавычки другого типа. Вам стоит освоить азы, чтобы не задавать элементарных вопросов.

спасибо за совет, забыл как-то про это.... но всё равно не идёт.

ещё вариант через стили замутил... https://jsfiddle.net/dmds02Ln/

но блоки не скрываются при нажатии радиокнопки, стили подключал через:
$doc = JFactory::getDocument();
$doc->addStyleDeclaration('#IP:checked ~.Block1 {display:none;}');

https://docs.joomla.org/J3.x:Adding_JavaScript_and_CSS_to_the_page

и через отдельный файл:

JHTML::stylesheet('your_css_file.css');
The default location for the CSS stylesheet is in media/system/css/.

If your CSS stylesheet is stored in another folder, you can use the following to load the CSS file:
JHTML::stylesheet('your_stylesheet.css', '/full/path/to/the/css/folder');

http://www.kksou.com/php-gtk2/Joomla-Developer-FAQs/How-to-add-CSS-to-Joomla-articles-plugins-modules-or-components.php

*

ProtectYourSite

  • Живу я здесь
  • ******
  • 849
  • 48
Не идет по какой причине? Зачем прыгать от одного к другому нежели разобраться до конца в одном?

*

robert

  • Профи
  • ********
  • 4002
  • 371
всё равно не идёт.
Так смотрите, корректно ли скрипт выводится в исходном коде, включите FireBug, приведите ссылку на пациент, в конце концов.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.