Как удалить теги из ссылок (cq: tags) при удалении из списка тегов?

Когда я удаляю теги из раздела тегов в cq5 / AEM, те же теги m = не удаляются из раздела ссылок на страницы (cq: tags).

Пока мне удалось найти пути, на которые ссылаются теги. Но невозможно удалить теги из раздела (cq: tags). Может кто-нибудь мне помочь.

Я пытаюсь добиться этого в сценариях

(function () {
if (window.location.pathname !== "/tagging") {
    return;
}

registerShowRefsAlert();

//the query to find tag references (pages and assets)
var CHECK_TAGS_SQL_2_QUERY = "SELECT * from [nt:base] AS t WHERE NAME(t) = 'jcr:content' " +
                                "AND CONTAINS(t.*, 'PLACEHOLDER')";

var query = '';
function registerShowRefsAlert(){

    var tagAdmin = CQ.tagging.TagAdmin,
        deleteTagFn = tagAdmin.deleteTag;

    //override ootb function to inject the logic showing references alert
    tagAdmin.deleteTag = function(){
        var tagPath = tagAdmin.getSelectedTag();

        if (tagPath == null) {
            return;
        }

        tagPath = tagPath.substring( this.tagsBasePath.length + 1);

        var tagInfo = CQ.tagging.parseTag(tagPath, true),
            query = encodeURIComponent(CHECK_TAGS_SQL_2_QUERY.replace("PLACEHOLDER", tagInfo.getTagID()));

        //you may want to replace this crxde lite call with a servlet returning query results
        query = "/crx/de/query.jsp?type=JCR-SQL2&showResults=true&stmt=" + query;

        //"this" here is tagadmin object, passed as context
        $.ajax( { url: query, context: this } ).done(showAlert);
    };

    function showAlert(data){
        console.log('query value' + query);
        if(_.isEmpty(data) || _.isEmpty(data.results)){
            deleteTagFn.call(this);
            return;
        }

        var message = "Selected tag is referenced. Click 'yes' to proceed deleting, 'no' to cancel the operation.<br><br>";

        _.each(data.results, function(result){
            message = message + result.path + "<br>";
        });

        CQ.Ext.Msg.show({
            "title": "Delete Tag",
            "msg": message,
            "buttons": CQ.Ext.Msg.YESNO,
            "icon": CQ.Ext.MessageBox.QUESTION,
            "fn": function (btnId) {
                if (btnId == "yes") {
                    this.postTagCommand("deleteTag", tagAdmin.getSelectedTag());
                    //Iterator<Resource> it = tag.find();
                    //console.log('the tag id' + it);
                    //this.deleteTag(it);
                }
            },
            "scope": this
        });
    }
}

} ());

введите описание изображения здесь

javascript,cq5,aem,

0

Ответов: 1


0 принят

В конце концов он это выясняет, он просто делает это асинхронно.

Возьмите сценарий, в который вы добавили тег на страницу, а затем удалите его. Если вы перейдете на эту страницу, чтобы посмотреть на теги, связанные с ней через пользовательский интерфейс, этот тег не появится. Однако, если вы перейдете в CRX / DE, вы все равно увидите, что это связано со страницей.

Если вы выполняете поиск через API TagManager, он не найдет никаких страниц, связанных с удаленным тегом.

Причина этого, по-видимому, была решением о том, чтобы все api, которые взаимодействовали с тегом, разрешали тег при его запросе. Я уверен, что это должно облегчить ситуацию, когда вы перемещаете тег или объединяете его в другой тег.

Существует ночная работа, называемая com.day.cq.tagging.impl.TagGarbageCollector

Это будет проходить и идентифицировать теги и разрешать их, что в вашем случае приведет к его удалению со страницы.

Или перефразировать, вам не нужно ничего делать, теги будут обновляться каждую ночь.

javascript, cq5, aem,
Похожие вопросы