отображение представления Drupal без страницы обрабатывает по шаблону вокруг этого

Если честно, я никогда не видел эту функцию (NEWCONTEXTFROMHIERARCHY), но это то, что мне удалось сделать. Я сделал функцию, которая создает необходимую часть иерархического дерева и объединяет два дополнительных параметра (базовый продукт и продукт). Затем я использовал newcontextfromhierarchy. Таким образом, функция возвращает весь узел.

create or replace function xml_hier(i_id in varchar2, i_base in varchar2, i_name in varchar2) return xmltype is
  v_ret xmltype;
begin
  select dbms_xmlgen.getxmltype(dbms_xmlgen.newcontextfromhierarchy('
    with t as (
      select level lvl, xmlelement("PGR", XMLATTRIBUTES(NAME))
        from PRODUCTGROUPS
        where id in (select id 
                       from PRODUCTGROUPS
                       connect by prior PARENTID = ID start with id = '||i_id||')
        connect by PARENTID = prior ID
        start with parentid is null)
    select * from t 
    union all
    select (select max(lvl) + 1 from t), XMLELEMENT("PRO", XMLATTRIBUTES('''||i_base||''' as "name")) from dual
    union all
    select (select max(lvl) + 2 from t), XMLELEMENT("PRV", XMLATTRIBUTES('''||i_name||''' as "name")) from dual'))
  into v_ret
  from dual;
  return v_ret;
end;

Итак, с созданными вами таблицами я запускаю:

select p.id,
       xmlroot(
         xmlelement("IMPORT",  
           xml_hier(g.id, p.baseproduct, p.name))
         , version '1.0" encoding="utf-8') as xml
  from products p 
  join productgroups g on p.productgroupid = g.id;

и в результате получаю:

<?xml version="1.0" encoding="utf-8"?>
<IMPORT>
  <PGR NAME="Product Group 1">
    <PGR NAME="Product Group 1-1">
      <PGR NAME="Product Group 1-1-1">
        <PRO name="Product X">
          <PRV name="Product Variant 1"/>
        </PRO>
      </PGR>
    </PGR>
  </PGR>
</IMPORT>

Иерархический запрос сначала работает в обратном направлении, в порядке найти предков. Затем все идет нормально, используя только уже известные id.

Надеюсь, это поможет:)

36
задан ceejayoz 29 October 2008 в 18:57
поделиться

5 ответов

Я искал способ вытянуть данные узла через ajax и предложил следующее решение для Drupal 6. После реализации изменений ниже, если Вы добавляете ajax=1 в URL (например, mysite.com/node/1?ajax=1), Вы получите просто содержание и никакой макет страницы.

в template.php файле для Вашей темы:

function phptemplate_preprocess_page(&$vars) {

  if ( isset($_GET['ajax']) && $_GET['ajax'] == 1 ) {
        $vars['template_file'] = 'page-ajax';
  }

}

затем создайте страницу-ajax.tpl.php в своем каталоге темы с этим содержанием:

<?php print $content; ?>
49
ответ дан 27 November 2019 в 05:27
поделиться

Существует также http://drupal.org/project/pagearray , который является общим решением ...

Кроме того, решение @Scott Evernden является перекрестным дыра в безопасности скриптов сайта (XSS). Не делай этого. Прочитайте документацию на drupal.org о том, как обрабатывать текст безопасным способом http://drupal.org/node/28984

1
ответ дан 27 November 2019 в 05:27
поделиться

Для тех, кто может попасть на эту страницу, если вы просто работаете со стандартными обратными вызовами (не обязательно с представлениями), это легко. В вашей функции обратного вызова вместо возврата кода для визуализации на странице используйте функцию «print».

Например:

function mymodule_do_ajax($node)
{
    $rval = <<<RVAL
        <table>
            <th>
                <td>Data</td>
                <td>Data</td>
                <td>Data</td>
            </th>
            <tr>
                <td>Cool</td>
                <td>Cool</td>
                <td>Cool</td>
            </tr>
        </table>
RVAL;

    //return $rval; Nope!  Will render via the templating engine.
    print $rval; //Much better.  No wrapper.
}

Ура!

5
ответ дан 27 November 2019 в 05:27
поделиться

Это называется топологическая сортировка .

Каноническое применение топологическая сортировка (топологическая order) находится в планировании последовательности задания или задачи; топологическая сортировка алгоритмы были впервые изучены в начало 1960-х годов в контексте PERT методика планирования в проекте управление (Ярнагин 1960). Задания представлены вершинами, и там является ребром от x до y, если задание x должно быть завершенным до выполнения задания y запущено (например, при стирке одежда, стиральная машина должна закончить, прежде чем положить одежду сухой). Затем топологическая сортировка дает порядок выполнения заданий.

-121--4746570-

Другие ответы великолепны; Мне не нужно повторять это. Но у меня есть некоторые дополнительные комментарии.

Не помещайте данные сеанса (весь сеанс) в файл cookie, а только идентификатор сеанса, возможно хэшированный. Для людей пути слишком легко редактировать содержимое файла cookie. Оставьте данные сеанса на сервере; возможно, в базе данных, если у вас много одновременных пользователей или сеансы работают очень долго.

Если даже сам идентификатор сеанса очень ценен, его можно даже поместить в параметр POST, тем самым предотвращая его появление в самом URL.

-121--3796824-

Простой способ отображения содержимого специального типа, которое вы хотите отобразить, без всего содержимого page.tpl.php :
Добавьте в файл template.php следующий фрагмент:

function mytheme_preprocess_page(&$vars) {
  if ($vars['node'] && arg(2) != 'edit') {
      $vars['template_files'][] = 'page-nodetype-'. $vars['node']->type;
    }
}

Добавьте page-nodetype-examplecontenttype.tpl.php к теме, например page.tpl.php , но без материала, который вы не хотите отображать, и с помощью распечатайте $ content в теле.

1
ответ дан 27 November 2019 в 05:27
поделиться

Эй, вот еще один способ сделать это:

1) Загрузите и установите бонусный пакет просмотров ( http://drupal.org/project/views_bonus ) 2) Создайте отображение «Feed» в представлении и используйте стиль «XML» (или что-то, что, по вашему мнению, лучше соответствует вашим потребностям). 3) Если вас не устраивает стандартный вывод XML, вы можете изменить его, настроив шаблон для представления. Проверьте настройки «темы», чтобы получить предложения по альтернативным именам шаблонов для этого конкретного представления (чтобы у вас по-прежнему оставался выходной XML по умолчанию для будущего использования).

Удачи! // Йохан Фальк, NodeOne, Швеция

2
ответ дан 27 November 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: