Лучший подход перезаписи DotNetNuke url?

1116 Ладно ... Ответов нет вообще, - так что я сам погрузился в это. Это лучшее, что я мог придумать. Я надеюсь, что это помогает другим, нуждающимся в том же.

Я разрывался между использованием extends ( источник ) или mixins ( источник ).

После небольшого исследования я использовал миксины ( это видео ударило по голове о том, чего я пытался достичь и как это решить). Если вы хотите сделать миксин глобальным для всех компонентов, посмотрите это видео около 4:11 и далее. Я не делаю это в нижеследующем объяснении.

Обратите внимание, что я использую веб-пакет вместе с laravel-mix с нижеприведенным решением. Используется в WordPress-установке.

Раскрытие

Это смесь из миллиарда разных ответов и статей. Потребовалось бы целую вечность, чтобы приписать все это правильным владельцам и источникам, так что я даже не буду пытаться Сожалею.

Файл миксинов (./mixins/scrollAndResize.js).

export const scrollAndResizeMixin = {
  created() {
    console.log( 'scrollAndResizes loaded' );
    this.calcScroll();
    this.calcPageAndViewport();
  },
  data: function() {
    return {
      scrollFromTop: 0,
      viewportHeight: 0,
      viewportWidth: 0,
      pageHeight: 0
    }
  },
  methods: {
    calcScroll: function (){
      let doc = document.documentElement;
      this.scrollFromTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);

      // DEBUG (uncomment and scroll, to check if it works)
      // console.log( (window.pageYOffset || doc.scrollTop) );
      // console.log( (doc.clientTop || 0) );
    },
    calcPageAndViewport: function(){
      // Viewport info
      this.viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
      this.viewportWidth = Math.min(document.documentElement.clientWidth, window.innerWidth || 0);

      // Page length
      var body = document.body;
      var html = document.documentElement;
      this.pageHeight = Math.max(
        body.scrollHeight,
        body.offsetHeight,
        html.clientHeight,
        html.scrollHeight,
        html.offsetHeight
      );
    },

  }
};

Основной js-файл (./app.js).

// Vue
import Vue from 'vue';

// Mixins
import { scrollAndResizeMixin } from './mixins/scrollAndResize';

// The Application
const app = new Vue({
  mixins: [
    scrollAndResizeMixin
  ],
  computed: {
    mobile: function() {
      return this.viewportWidth < 992; // This uses the mixin
    }
  },
  created() {
    window.addEventListener( 'scroll', this.calcScroll );
    window.addEventListener( 'resize', this.calcPageAndViewport );
  },
  destroyed() {
    window.removeEventListener( 'scroll', this.calcScroll );
    window.removeEventListener( 'resize', this.calcPageAndViewport );
  }
}); 

И / или использовать его только в таком компоненте, как ...






5
задан user53885 12 February 2009 в 05:43
поделиться

4 ответа

Если вы используете DotNetNuke 4.8 или выше, вам просто нужно включить удобные для человека URL-адреса через Web.Config.

Чтобы включить удобные для человека URL-адреса, замените:

<add name="DNNFriendlyUrl" type="DotNetNuke.Services.Url.FriendlyUrl.DNNFriendlyUrlProvider, DotNetNuke.HttpModules" includePageName="true" regexMatch="[^a-zA-Z0-9 _-]" />

на:

<add name="DNNFriendlyUrl" type="DotNetNuke.Services.Url.FriendlyUrl.DNNFriendlyUrlProvider, DotNetNuke.HttpModules" includePageName="true" regexMatch="[^a-zA-Z0-9 _-]" urlFormat="HumanFriendly" />

ОБНОВЛЕНИЕ: Для DNN 7.x и выше теперь это должно быть:

<add name="DNNFriendlyUrl" type="DotNetNuke.Services.Url.FriendlyUrl.DNNFriendlyUrlProvider, DotNetNuke.HttpModules" includePageName="true" regexMatch="[^a-zA-Z0-9 _-]" urlFormat="advanced" />

Дополнительная информация: Включить удобные для человека URL-адреса в DotNetNuke

5
ответ дан 13 December 2019 в 19:36
поделиться

Другое предложение является Бластером Страницы, если Вы не желаете, пишут Ваш собственный код. Работы хорошо для сайтов l используют его на.

1
ответ дан 13 December 2019 в 19:36
поделиться

Проверьте это - детали здесь:

http://www.ifinity.com.au/Blog/Technical_Blog/EntryId/19/Rewriting-the-DotNetNuke-Url-Rewriter-Module/

Кроме того, смотрите на существующий модуль FriendlyUrl, это уже включено в DNN.

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

3
ответ дан 13 December 2019 в 19:36
поделиться

Чтобы напрямую ответить на ваш вопрос: да, вы можете добавить код на страницу настроек страницы DNN. Однако вы измените основной код и, следовательно, не сможете легко обновить вашу установку, когда будет выпущен следующий выпуск DNN.

Многие люди приходят в DNN и хотят написать новый URL-адрес. Проблема не в переписывании: это заставляет структуру DNN генерировать правильные URL-адреса там, где вы хотите, - в меню, в сгенерированных ссылках внутри модулей. Чтобы действительно изменить схему перезаписи, вам необходимо заменить / дополнить функцию переопределения URL-адресов, удобную функцию генерации URL-адресов и предоставить некоторую возможность перенаправления, чтобы связать старые и новые URL-адреса вместе.

2
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

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