Диалоговое окно дизайна Force AEM classic UI & touch UI имеет один и тот же глобальный дизайн - PullRequest
0 голосов
/ 04 февраля 2019

Мы следовали этому руководству -> https://www.danklco.com/posts/2013/06/changing-cq-components-design-path.html, чтобы создать глобальное решение пути проектирования для нескольких компонентов для совместного использования дизайна, которое идеально подходит для классического диалогового окна дизайна пользовательского интерфейса.

public class GlobalDesignDialogTag extends BaseTag
{

    /**
     * Global design properties attribute name.
     */
    public static final String GLOBAL_DESIGN_PROPERTIES_ATTRIBUTE_NAME = "globalDesignProperties";

    private static final long serialVersionUID = 1L;

    @Override public final int doEndTag()
    {

        final String
                globalDesignPath =
                getCurrentDesign().getPath() + "/" + JCR_CONTENT + "/" + getCurrentResource().getName();

        EditContext editContext = getEditContext();

        String currentDesignPath = getCurrentDesign().getPath() + "/jcr:content/default-page/par-main/secondary-nav";

        if (WCMMode.fromRequest(getSlingRequest()) == WCMMode.DESIGN)
        {
            // Set the design dialog content path to be global design level instead of template
            editContext.setContentPath(globalDesignPath);
        }

        if (AuthoringUIMode.fromRequest(getSlingRequest()).equals(AuthoringUIMode.TOUCH)) {
            editContext.setContentPath(globalDesignPath);
        }

        final Resource globalDesignResource = getResourceResolver().getResource(globalDesignPath);
        if (globalDesignResource != null)
        {
            // Set an attribute containing global design properties as ${currentStyle.propertyName} will still
            // point to the default design dialog path under the template.
            pageContext.setAttribute(GLOBAL_DESIGN_PROPERTIES_ATTRIBUTE_NAME,
                    globalDesignResource.adaptTo(ValueMap.class));

        }
        return EVAL_PAGE;

    }

    /**
     * Gets the EditContext from the pageContext.
     *
     * @return The EditContext from the pageContext.
     */
    private EditContext getEditContext()
    {

        return (EditContext) pageContext.getAttribute(DefineObjectsTag.DEFAULT_EDIT_CONTEXT_NAME);
    }

    /**
     * Gets the current design from the pageContext.
     *
     * @return The current design from the pageContent.
     */
    private Design getCurrentDesign()
    {

        if (pageContext.getAttribute(DefineObjectsTag.DEFAULT_CURRENT_DESIGN_NAME) != null)
        {
            return (Design) pageContext.getAttribute(DefineObjectsTag.DEFAULT_CURRENT_DESIGN_NAME);
        }
        return getCurrentResource().adaptTo(Design.class);
    }

}

Теперь нам нужнообновить классический пользовательский интерфейс до сенсорного, который включает в себя множество обновлений компонентов, но мы по-прежнему хотим сохранить большую часть основного Java-кода без изменений или как можно меньше изменений.Но вышеприведенный метод обучения editContext.setContentPath(globalDesignPath); не работает с диалоговым окном дизайна сенсорного интерфейса, кажется ... Пожалуйста, см. Рисунок ниже enter image description here

Итак, что произошло с розовыми линиями, вКлассическое диалоговое окно дизайна пользовательского интерфейса - ожидаемое поведение, при использовании editContext.setContentPath(globel) он сохраняет вторичный узел навигации диалогового окна дизайна на уровне шаблона дизайна.

Но с зелеными линиями, используя тот же пример кода, что и выше, открывается диалоговое окно дизайна.сохранить от сенсорного интерфейса, editContext.setContentPath(globel) это не похоже на что-то сделал ... он сохранил узел под demo-site/jcr:content/default-page/par-main/secondary-nav, который является уровнем дизайна страницы шаблона ... другой вторичный компонент навигации в другой шаблон дизайна страницы не сможетполучить доступ к свойствам.В идеале диалоговое окно дизайна сенсорного интерфейса должно делать то же, что и синие линии ... сохраняя диалоговое окно, оно должно обновить свойство узла demo-site/jcr:content/secondary-nav

После исследования я думаю, что наиболее подозрительная строка - editContext.setContentPath(globel),это сенсорный интерфейс, он имеет новый тип (EditContext) объекта или API для сохранения диалогового окна дизайна сенсорного интерфейса в пользовательском пути?Пожалуйста, предложите с примером кода, если это возможно.Спасибо

1 Ответ

0 голосов
/ 18 июля 2019

Проверьте, указывает ли iniside /content узел, что ваша страница указывает на правильный cq:designpath.

...