We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 16017
    • 11 Posts
    Спасибо, конечно... Но до TV я так и не достучался. Похоже, что $tmplvars у меня просто пустой, так как ниодна функция его содержимого не распечатывает.
      • 785
      • 2,113 Posts
      Если в TV не введено значение, а осталось значение по умолчанию, в $tmplvars ничего не будет.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 16017
        • 11 Posts
        Не, я только на уже введённых или заново введённых значениях проверял...
          • 785
          • 2,113 Posts
          Так не бывает…
          Создайте плагин:
          global $tmplvars;
          $e =& $modx->event;
          switch ($e->name ) {
              case 'OnBeforeDocFormSave':
          	print_r ($tmplvars); exit;
              break ;
              default:
                  return;
          }
          Назначьте ему событие OnBeforeDocFormSave, если к событию привязаны другие плагины, убедитесь, что новый будет стоять первым в списке. Попробуйте сохранить документ и поместите здесь результат.
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 16017
            • 11 Posts
            Сделал:

            Array ( [catimage] => 5 [descrimage] => 6 [fullsize] => 7 [dscrimg] => 34 [descralt] => 8 [manuf] => 10 [itemtype] => 9 [sitemap_priority] => 11 [sitemap_changefreq] => 12 [sitemap_exclude] => 13 [14] => Array ( [0] => 14 [1] => есть ) [37] => Array ( [0] => 37 [1] => 6 ) [15] => Array ( [0] => 15 [1] => 1250 ) [36] => Array ( [0] => 36 [1] => 7500 ) [strana] => 16 [material] => 17 [podkladka] => 18 [podoshva] => 19 [20] => Array ( [0] => 20 [1] => Оранжевый ) [kabluk] => 21 [r35] => 24 [25] => Array ( [0] => 25 [1] => 1 ) [26] => Array ( [0] => 26 [1] => 1 ) [27] => Array ( [0] => 27 [1] => 1 ) [28] => Array ( [0] => 28 [1] => 1 ) [29] => Array ( [0] => 29 [1] => 1 ) [30] => Array ( [0] => 30 [1] => 1 ) [r42] => 31 [r43] => 32 [r44] => 33 [r45] => 38 [r46] => 40 [r47] => 41 [r48] => 42 )



            В конце массива есть несколько TV типа r42, r43 и тд. Ещё в середине есть r35 => 24. Идентификаторы совпадают нужными. Но там, где должен быть r36 после r35, идёт другой массив
            [25] => Array ( [0] => 25 [1] => 1 )

            По идее, так отобразился параметр, в котором записано значение... Если ввести вручную значение из бэк-энда, то плагин нормально распечатывает его, в базу не сохраняет (как я понял, там выход прописан). Вобщем, суть такая, что мне надо сложить все TV r35 — r48 даже если они пустые и записать результат в другой, который может быть как пустой, так и уже заполненный. Нужно писать проверку на "пустоту" и на основании этого указывать, что делать с параметром? Например, если он пустой, то попробовать найти в базе значение по умолчанию или просто задать значение напрямую через плагин (например, 0) и после этого складывать.
              • 785
              • 2,113 Posts
              [26] => Array ( [0] => 26 [1] => 1 )
              То есть, как я раньше и писал, в $tmplvars[26][1] находится заданное значение, в данном случае 1. Если TV не задан или равен значению по умолчанию, в $tmplvars по индексу равному имени переменной находится идентификатор переменной. Если же значение задано, по индексу равному идентификатору переменной находится массив из идентификатора и значения. То есть, если нужно присвоить значение переменной, например, r44, то надо выполнить что-то вроде:
              $tmplvars[$tmplvars[’r44’]][0]=$tmplvars[’r44’];
              $tmplvars[$tmplvars[’r44’]][1]=’Значение’;
              unset $tmplvars[’r44’];
              Все это работает, если TV не задано, иначе для замены надо знать идентификатор (в данном случае 33) и поступать так:
              $tmplvars[$tmplvars[33]][1]=’Значение’;
              Все это только основы, далее нужно разбираться в PHP и писать соответствующие программы.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
                • 2207
                • 16 Posts
                Прочитал всё и смог разобраться с TV параметрами, работает. Спасибо.
                но с id документа обламался. Его ведь тоже нету, когда страница создается, но еще ни разу не сохранялась.

                Quote from: Klaf at Jul 03, 2010, 12:49 PM


                Элементарно подобное получается по событию OnBeforeDocFormSave со следующим кодом:
                global $content;
                $annotation=$_POST[’pagetitle’];
                ... и т.д.

                А вот с "global $tmplvars" такое уже не проходит.

                Пробовал по аналогии сделать

                global $id, $tmplvars;
                if ($id == "") { $id=$_POST[’id’]; }

                но не работает...
                  • 785
                  • 2,113 Posts
                  Так в момент события OnBeforeDocFormSave еще ничего не записано, и просто нет ID документа, если он ранее не сохранялся. Надо привязаться к событию OnDocFormSave, когда уже произошла запись, и брать информацию из параметра события:
                  $e = &$modx->Event;
                  $id=$e->params[’id’];
                    Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                    Статьи о MODx, регулярно новые публикации
                    • 2207
                    • 16 Posts
                    я этот плагин пишу для того, что бы в момент создания страницы поле alias - имя страницы - формировать не из pagetitle а из специально созданного TV где я храню ключевые слова страницы, так мне удобнее, чем встроенные средства.
                    потом это поле я заношу в мета тэг description и из этого же поля, только переведя в транслит, формирую имя страницы
                    в принципе, id можно и не использовать, я хотел его добавлять в конец сформированного имени для двух целей: 1. для уникальности имени. 2. что бы можно было по имени определить какой id страницы.
                    так вот если ставить то, что вы предлагаете, на событие OnDocFormSave , то не пишется ничего поле alias (Псевдоним)...
                      • 785
                      • 2,113 Posts
                      Quote from: aryanatha at Aug 16, 2010, 12:57 PM

                      не пишется ничего поле alias (Псевдоним)...
                      Естественно, после того, как запись сохранена, ничего не пишется, надо писать самостоятельно (что достаточно просто). Чудес не бывает – до сохранения нового документа id неизвестен, а после сохранения автоматически ничего уже не сохраняется.
                        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                        Статьи о MODx, регулярно новые публикации