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

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Пытаюсь добавить поле в форму добавления материалов, но судя по тому что выводит   printf("<pre>%s</pre>", print_r( $form , true)); ( http://pastebin.com/U2vD890c ) то форма добавляется не туда ( в конец ) и не выводится вообще. Как мне добавить поле, после / перед поля на 415 строке
Код: php
public function onContentPrepareForm($form, $data)
{

if (!($form instanceof JForm))
   {
       $this->_subject->setError('JERROR_NOT_A_FORM');
       return false;
   }

if( $form->getName()!= "com_content.article" )
return true;


   $xmlform = new SimpleXMLElement('<form />');
$xmlfields = $xmlform->addChild('fields');
$xmlfieldset = $xmlfields->addChild('fieldset');
$xmlfieldset->addAttribute('name', 'default');
$xmlfield = $xmlfieldset->addChild('field');

        $xmlfield->addAttribute('name', 'formState_list');
        $xmlfield->addAttribute('dafault', '1');
        $xmlfield->addAttribute('type', 'list');
        
        $optionYes = $xmlfield->addChild( "option", "Да" );
        $optionYes->addAttribute ( "value", "0" );

        $optionNo = $xmlfield->addChild( "option", "Нет" );
        $optionNo->addAttribute ( "value", "1" );

        $xmlfield->addAttribute('label', 'PLG_FIELD_ATTACH_FORM_LABEL');
        $xmlfield->addAttribute('description', 'PLG_ATTACH_FORM_DESCRIPTION');


        $form->setField( $xmlform );


        printf("<pre>%s</pre>", print_r( $form , true));


return true;
}
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
неужели не кто не знает?
2й день вожусь, с одной кнопкой..
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Вы пишете что пытаетесь добавить поле в форму, а вместо этого создаете другую форму и добавляете ее в первую форму в качестве поля.. имхо бред какой то.. ну и все правильно он эту вашу форму добавляет в исходную форму в конец. Вы разработчик? Если нет то будет непросто вам объяснить как надо распарсить вашу XML форму, если да то учитесь работать с simplexml, или изучите методы jform, возможно их будет достаточно.
интернет-блог: http://websiteprog.ru
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Я разработчик, но не модулей для Joomla ^-^ .Я делаю по готовому примеру http://joomlaforum.ru/index.php/topic,274993.0.html
Я сам сразу не понял почему и когда код не заработал я пробовал сделать так


Код: php
   
   $xmlfield =  new SimpleXMLElement('<field />');
    $xmlfield->addAttribute('name', 'formState_list');
    $xmlfield->addAttribute('dafault', '1');
    $xmlfield->addAttribute('type', 'list');

    $optionYes = $xmlfield->addChild( "option", "Да" );
    $optionYes->addAttribute ( "value", "0" );

    $optionNo = $xmlfield->addChild( "option", "Нет" );
    $optionNo->addAttribute ( "value", "1" );


    $form->setField( $xmlfield );

но автор модуля на который я выше давал ссылку, сказал что фишка в имени для filedset ( я и не понял в чем)
 
Код: php
    $xmlform = new SimpleXMLElement('<form />');
    $xmlfields = $xmlform->addChild('fields');
    $xmlfieldset = $xmlfields->addChild('fieldset');
    $xmlfieldset->addAttribute('name', 'default');// тут
    $xmlfield = $xmlfieldset->addChild('field');

    $xmlfield->addAttribute('name', 'formState_list');
    $xmlfield->addAttribute('dafault', '1');
    $xmlfield->addAttribute('type', 'list');

    $optionYes = $xmlfield->addChild( "option", "Да" );
    $optionYes->addAttribute ( "value", "0" );

    $optionNo = $xmlfield->addChild( "option", "Нет" );
    $optionNo->addAttribute ( "value", "1" );


    $form->setField( $xmlform );
да и если верить докам Joomla нужно вставлять форму http://docs.joomla.org/Adding_custom_fields_to_the_article_component
« Последнее редактирование: 06.06.2014, 03:15:06 от __noob__ »
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
1. Мой плагин готовое решение
Я учился программированию(языки, методы, стили, алгоритмы) около 25 лет. Никогда при этом не назвав себя программистом.
И я помню свою первую программу "пятнашки" на программируемом калькуляторе сестры, ты программист напишешь ее. Если у тебя загвоздки о вставке поля. Бл.ть ты поле не можешь вставить.
А вот  теперь по данному вопросу.Посмотри где происходит вывод, ты же программист. Вставляй var_dump(), print_r, пиши свой обработчик ошибок и т. д.
На будущее, когда говоришь разработчик покажи свои готовые решения
Твой пример в принцыпе не должен работать ( но он блин работает ), так как если посмотреть в исходники Joomla, а точнее в функцию setField, http://hg.joomla.org/joomla-platform/src/247ba8d88526/libraries/joomla/form/form.php#cl-789
то можно увидеть  
Код: php
if (!($element instanceof JXMLElement)) {
// TODO: throw exception.

return false;
}
и отсюда можно сделать вывод что элемент SimpleXMLElement , не обработается.
И да я знаю что  JXMLElement это обертка во круг SimpleXMLElement, но если вставить такой код, то выведет "no"
Код: php
if ( $xmlform instanceof JXMLElement ) {
    echo "yes";
   }
   else {
    echo "no";
   }

П.с это не решение проблемы, это .... поле всеравно не добавляется .
« Последнее редактирование: 10.06.2014, 20:01:19 от __noob__ »
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Ты взял версию 3
в 2,5
Код: php-brief
public function setField(&$element, $group = null, $replace = true)
{
// Make sure there is a valid JForm XML document.
if (!($this->xml instanceof SimpleXMLElement))
{
// TODO: throw exception.

return false;
}

// Make sure the element to set is valid.
if (!($element instanceof SimpleXMLElement))
{
// TODO: throw exception.

return false;
}
Код: php-brief
$xmlform = new JXMLElement('<form />');
попробуй тогда
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Ты взял версию 3
в 2,5
Код: php-brief
public function setField(&$element, $group = null, $replace = true)
{
// Make sure there is a valid JForm XML document.
if (!($this->xml instanceof SimpleXMLElement))
{
// TODO: throw exception.

return false;
}

// Make sure the element to set is valid.
if (!($element instanceof SimpleXMLElement))
{
// TODO: throw exception.

return false;
}
да пофиг, поле не ведомым образом всеравно добавлялось в XML, только не туда. КАКИМ магическим образом я так и не понял.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
да пофиг, поле не ведомым образом всеравно добавлялось в XML, только не туда. КАКИМ магическим образом я так и не понял.


Походу те исходники старые вот почему добавляется, вот то что щас там
Код: php
if (!($this->xml instanceof SimpleXMLElement))
{
throw new UnexpectedValueException(sprintf('%s::getFieldAttribute `xml` is not an instance of SimpleXMLElement', get_class($this)));
}
Переданный элемент вообще не проверяется.
$xmlfieldset->addAttribute('name', 'default');// тут магия  ^-^

Нет там не какой магии, так как имя элемента не на что не влияет. магия тут

Код: php
protected static function addNode(SimpleXMLElement $source, SimpleXMLElement $new)
{
// Add the new child node.
$node = $source->addChild($new->getName(), trim($new)); // магия тут

// Add the attributes of the child node.
foreach ($new->attributes() as $name => $value)
{
$node->addAttribute($name, $value);
}

// Add any children of the new node.
foreach ($new->children() as $child)
{
self::addNode($node, $child);
}
}
« Последнее редактирование: 10.06.2014, 20:35:25 от __noob__ »
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Цитата: __noob__
так как имя элемента не на что не влияет
Вообще нечего не влияет куда добавляется элемент, он всегда добавляется в конец http://us1.php.net/manual/en/simplexmlelement.addchild.php
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
я показал что поле вставляется в именованный <fieldset>
чтобы знать где искать его потом
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Далее я пришел к выводу что мой код, работает к примеру в форме регестрации но не в админке поэтому, нужно искать другой подход.
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
« Последнее редактирование: 10.06.2014, 21:56:53 от __noob__ »
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
« Последнее редактирование: 10.06.2014, 21:56:43 от __noob__ »
*

KKAAZZOO

  • Живу я здесь
  • 2288
  • 118 / 9
Сколько гемора себе нажить с ерундой и столько времени потратить, вместо того чтобы научиться пользоваться ССK Seblod.
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Всетаки блин я был прав, просто не то закоментировал, имя вообще не на что не влияет его можно менять как угодно и в форму регистрации все добавляется, не добавляется только если нет имени вообще в форму регистрации добавляется и с таким именем
$xmlfieldset->addAttribute('name', 'sadsafafgasgdsgsdgsgsdgsgsgds');
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Цитировать
добавляется, не добавляется только если нет имени вообще в форму регистрации добавляется и с таким именем
$xmlfieldset->addAttribute('name', 'sadsafafgasgdsgsdgsgsdgsgsgds');
именно так. ведь ты же хотел вставить в определенное место. в нужный <fieldset>
вот и магия. ты должен создать <fieldset> с заданным именем и туда вставлять
повторив название существующего из формы вставишь именно туда
KKAAZZOO, __noob__ мог вставить поле c помощью js, зачем тут твое расширение
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Цитировать
повторив название существующего из формы вставишь именно туда
А есои у fieldset формы нет названия, что тогда делать?
https://github.com/joomla/joomla-cms/blob/master/components/com_content/models/forms/article.xml
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Пришли к тому из чего начали. Смотри как и где выводится эта форма. И там ты уже точно увидишь по какому принципу и порядку выводятся  <fieldset>
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Пришли к тому из чего начали. Смотри как и где выводится эта форма. И там ты уже точно увидишь по какому принципу и порядку выводятся  <fieldset>
Да уже 100 раз смотрел, форма тупо берется из этого файла https://github.com/joomla/joomla-cms/blob/master/components/com_content/models/forms/article.xml и выводится

Цитировать
вот и магия. ты должен создать <fieldset> с заданным именем и туда вставлять
Я не могу понять как мне взять то чего нет?
Код: xml
<fieldset addfieldpath="/administrator/components/com_categories/models/fields">
но даже если я возьму имя
Код: xml
<fieldset name="image-intro">
то всеравно нечего не ставится

Вопрос в том, как оно добавит если SimpleXMLElement->addChild  добавляет только в конец, а в у них он и используется?

П.с ладно буду искать другое решение потому что это явно не рабочие

« Последнее редактирование: 11.06.2014, 00:08:08 от __noob__ »
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Цитировать
П.с ладно буду искать другое решение потому что это явно не рабочие
Вот тут ты прав. У компонента com_content здесь нет события onContentPrepareForm. Следовательно и ловить тебе нечего.
Как же решить твою задачу?
Для этого нужно из папки /layouts/joomla/edit скопировать файл global.php в
/administrator/templates/твой шаблон админки/html/layouts/joomla/edit/global.php
Далее разберешься правя этот файл
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Да я придумал как решить проблему с помощью

Код: php
function onDisplay($name)
    {
     $user = JFactory::getUser();
      if ($user->authorise('core.edit', $asset) || $user->authorise('core.create', $asset) || count($user->getAuthorisedCategories($asset, 'core.create')) > 0 || ($user->authorise('core.edit.own', $asset) && $author == $user->id)) {
          $button = new JObject;
            $button->class = 'btn';
            $button->text = "text";
            $button->name = 'feeda';
            // $button->options = "{handler: 'iframe', size: {x: 800, y: 500}}";
            return $button;
}
    }
и js.
на танцы с бубном уже нет времени.
« Последнее редактирование: 11.06.2014, 10:57:17 от __noob__ »
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Остался последний этап квеста, не могу найти какое событие обрабатывает отправку формы, что бы можно было получить нужное мне поле и id материала?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Остался последний этап квеста, не могу найти какое событие обрабатывает отправку формы, что бы можно было получить нужное мне поле и id материала?

onContentAfterSave - после сохранения
onContentBeforeDelete - до сохранения
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
onContentAfterSave - после сохранения
onContentBeforeDelete - до сохранения
сделал простой пример, onContentPrepareForm обрабатывается но в "testVarForDebug" нечего нет, что не так?
onContentAfterSave тоже не работает.

Код: php
public function onContentBeforeDelete($context, $data)
{
$params = JComponentHelper::getParams("com_content");
$params->set( "testVarForDebug", "hello ***ed world" );

}

public function onContentPrepareForm($form, $data)
{

$params = JComponentHelper::getParams("com_content");
echo "test val = ". $params->get("testVarForDebug");
}

и куда сохраняется JComponentHelper params в БД ?

П.с очень логично назвать обработчик формы "onContentBeforeDelete " :)
« Последнее редактирование: 11.06.2014, 21:50:11 от __noob__ »
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
Цитировать
зачем тебе параметры компонента
Это просто что бы проверить что событие обрабатывается, я просто не разобрался как в базу писать.
Цитировать
посмотри JInput
это знаю, но как получить если, оно не сохраняет?
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Цитировать
я просто не разобрался как в базу писать
смотря что писать ты собрался, какие данные. Ты ведь можешь писать в собственную таблицу, вставить в поле в attribs json (добавлять в таблицу свое поле -хак)
*

__noob__

  • Захожу иногда
  • 57
  • 0 / 0
смотря что писать ты собрался, какие данные. Ты ведь можешь писать в собственную таблицу, вставить в поле в attribs json (добавлять в таблицу свое поле -хак)
нужно записать в базу id материалов на которых нужно подключить модуль, и при отображение страницы проверять есть ли этот id.
Ты ведь можешь писать в собственную таблицу, вставить в поле в attribs json (добавлять в таблицу свое поле -хак)
не понял как
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
примерно так. Развернул, добавил, свернул
Код: php-brief
$all_attribs = json_decode($attribs);
$all_attribs->you_parametr = 1;
$attribs = json_encode($all_attribs);
далее где надо получаешь
Код: php-brief
$all_attribs = json_decode($attribs);
var_dump($all_attribs->you_parametr);
поправил  ^-^
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вставка кода вызова модуля в тело шаблона другого модуля

Автор Dorfman

Ответов: 15
Просмотров: 1746
Последний ответ 19.11.2018, 21:45:54
от beliyadm
Добавить проверку в форму регистрации

Автор apsorry

Ответов: 3
Просмотров: 1184
Последний ответ 08.01.2016, 15:40:02
от apsorry
Сортировка материала в RSS (view.feed.php) по дате создания

Автор bombapiter

Ответов: 7
Просмотров: 2492
Последний ответ 24.10.2014, 10:49:31
от bombapiter
Как проверить существует ли ID материала?

Автор sorrrrry

Ответов: 7
Просмотров: 2273
Последний ответ 15.10.2014, 16:52:58
от SmokerMan
[Решено] Доступ к параметру материала из шаблона

Автор olf

Ответов: 5
Просмотров: 1344
Последний ответ 10.07.2014, 18:32:21
от b2z