Добрый день! хочу сделать вот такую структуру url для блога

Пример
https://test.test/blog -- выводятся посты со всех категорий
https://test.test/blog/na-doske -- выводятся посты с выбраной категории
https://test.test/blog/na-doske/nomer-305 -- в url идет сначала категория потом статья
https://test.test/blog/page/2 -- пагинация с выводом статей со всех категорий
https://test.test/blog/na-doske/page/2 -- пагинация с выводом статей в определенной категории

Структура url на моем тестовом сайте при использовании плагина rainlab:blog

https://testsites/blog/default -- выводятся посты со всех категорий Хочу убрать либо скрыть приставку /default, так чтобы url имел вид https://testsites/blog где и в каком месте это меняется? или может есть способ как это сделать красиво
https://testsites/blog/aboutweddings/default -- выводятся посты с выбраной категории, сдесь тоже самое убрать /default
https://testsites/blog/post/cicerona-i-ih-anglijskij-perevod -- страница записи блога вместо /post/ подставить категорию к которой принадлежит данная статья
https://testsites/blog/1 -- пагинация с выводом статей со всех категорий, сюда хотелось бы вставить /page/ перед номером страницы так как в примере
https://testsites/blog/aboutweddings/2 -- пагинация с выводом статей в определенной категории, сдесь тоже самое хочу вставить /page/ перед номером страницы так как в примере

Есть ли возможность кастомизации стандартных плагинов которые ставятся из репозитария, добавление или изменение исходного кода автора ?

  • И так создаем 3 странички blog, blogall, post.
    blogall.htm выводит все записи в виде https://testsites/blog

    title = "blogall"
    url = "/blog"
    is_hidden = 0
    robot_index = "index"
    robot_follow = "follow"
    
    [blogPosts]
    pageNumber = "{{ :page }}"
    postsPerPage = 3
    noPostsMessage = "No posts found"
    sortOrder = "published_at desc"
    categoryPage = "cat"
    postPage = "post"
    ==
    {% partial 'posts/default' %}

    blog.htm Выводит записи с пагинацией в виде https://testsites/blog/page/1

    title = "blog"
    url = "/blog/page/:page?"
    is_hidden = 0
    robot_index = "index"
    robot_follow = "follow"
    
    [blogPosts]
    pageNumber = "{{ :page }}"
    postsPerPage = 3
    noPostsMessage = "No posts found"
    sortOrder = "published_at desc"
    categoryPage = "cat"
    postPage = "page"
    ==
    {% partial 'posts/default' %}

    post.htm вывод поста

    title = "post"
    url = "/blog/:cat/:slug"
    is_hidden = 0
    robot_index = "index"
    robot_follow = "follow"
    
    [blogPost]
    slug = "{{ :slug }}"
    categoryPage = 11
    ==
    {% component 'blogPost' %}

    Ну и наш модифицированный список постов partial/posts/default.htm

    ==
    
    <ul class="post-list">
        {% for post in posts %}
        <li>
            
            <h3><a href="/blog/{{ post.categories[0].slug }}/{{ post.slug }}">{{ post.title }}</a></h3>
    
            <p class="info">
                Posted
                {% if post.categories.count %} in {% endif %}
                {% for category in post.categories %}
                <a href="{{ category.url }}">{{ category.name }}</a>{% if not loop.last %}, {% endif %}
                {% endfor %}
                on {{ post.published_at|date('M d, Y') }}
            </p>
    
            <p class="excerpt">{{ post.summary|raw }}</p>
        </li>
        {% else %}
        <li class="no-data">{{ __SELF__.noPostsMessage }}</li>
        {% endfor %}
    </ul>
    
    {% if posts.lastPage > 1 %}
    <ul class="pagination">
        {% if posts.currentPage > 1 %}
        <li><a href="/blog/page/{{ posts.currentPage -1}}">&larr; Prev</a> </li>
    
    
        {% endif %}
    
        {% for page in 1..posts.lastPage %}
        <li class="{{ posts.currentPage == page ? 'active' : null }}">
    
            <a href="/blog/page/{{ page }}">{{ page }}</a>
    
    
        </li>
        {% endfor %}
    
        {% if posts.lastPage > posts.currentPage %}
        <li><a href="/blog/page/{{ posts.currentPage +1}}">Next &rarr;</a></li>
        {% endif %}
    </ul>
    {% endif %}

    Теперь у нас
    по https://testsites/blog все посты
    по https://testsites/blog/page/1 посты по страницам
    по https://testsites/blog/категория/слагпоста пост

  • Изменено

Тут нет нужды лезть в код плагина просто создайте нужную для вас структуру страниц в CMS Pages.
Например:

https://testsites/blog/default -- выводятся посты со всех категорий Хочу убрать либо скрыть приставку /default, так

title = "blog"
url = "/blog"
is_hidden = 0
robot_index = "index"
robot_follow = "follow"

[blogPosts]
pageNumber = "{{ :page }}"
postsPerPage = 10
noPostsMessage = "No posts found"
sortOrder = "published_at desc"
categoryPage = "blog/category"
postPage = "blog/post"
==
{% component 'blogPosts' %}

По https://testsites/blog будут показаны все посты.

  • MORION_2010 ответили на это сообщение.
    • Изменено

    https://testsites/blog/post/cicerona-i-ih-anglijskij-perevod -- страница записи блога вместо /post/ подставить категорию к которой принадлежит данная статья

    Можно скопировать в partial каталог \plugins\rainlab\blog\components\posts\ и подредактировать default.htm.
    Но как быть если категорий несколько(пост относится к нескольким категориям)?

    • MORION_2010 ответили на это сообщение.

      Vladimir хранить одну запись в нескольких категориях не планируется

      • Vladimir ответили на это сообщение.
        • Изменено

        MORION_2010 Тогда например так:

        Создать partial/posts/default.htm

        
        ==
        
        <ul class="post-list">
            {% for post in posts %}
                <li>
        
        
        <!--     <h3><a href="{{ post.url }}">{{ post.title }}</a></h3> -->
                 <h3><a href="/blog/{{ post.categories[0].slug }}/{{ post.slug }}">{{ post.title }}</a></h3> 
        
                    <p class="info">
                        Posted
                        {% if post.categories.count %} in {% endif %}
                        {% for category in post.categories %}
                            <a href="{{ category.url }}">{{ category.name }}</a>{% if not loop.last %}, {% endif %}
                        {% endfor %}
                        on {{ post.published_at|date('M d, Y') }}
                    </p>
        
                    <p class="excerpt">{{ post.summary|raw }}</p>
                </li>
            {% else %}
                <li class="no-data">{{ __SELF__.noPostsMessage }}</li>
            {% endfor %}
        </ul>
        
        {% if posts.lastPage > 1 %}
            <ul class="pagination">
                {% if posts.currentPage > 1 %}
                    <li><a href="{{ this.page.baseFileName|page({ (__SELF__.pageParam): (posts.currentPage-1) }) }}">&larr; Prev</a></li>
                {% endif %}
        
                {% for page in 1..posts.lastPage %}
                    <li class="{{ posts.currentPage == page ? 'active' : null }}">
                        <a href="{{ this.page.baseFileName|page({ (__SELF__.pageParam): page }) }}">{{ page }}</a>
                    </li>
                {% endfor %}
        
                {% if posts.lastPage > posts.currentPage %}
                    <li><a href="{{ this.page.baseFileName|page({ (__SELF__.pageParam): (posts.currentPage+1) }) }}">Next &rarr;</a></li>
                {% endif %}
            </ul>
        {% endif %}

        Тут при формировании url поста берется slug его первой категории и slug поста. (там где закомментированная строка)

        Vladimir

        title = "Блог"
        url = "/blog/:page"
        layout = "blog/blog"
        is_hidden = 0
        robot_index = "noindex"
        robot_follow = "nofollow"
        
        [blogPosts]
        pageNumber = "{{ :page }}"
        categoryFilter = "{{ :slug }}"
        postsPerPage = 2
        noPostsMessage = "Записей не найдено"
        sortOrder = "published_at desc"
        categoryPage = "blog/stranica-kategorii"
        postPage = "blog/stranica-posta"
        ==
        {% component 'blogPosts' %}

        вот мой код ... в вашем варианте я так тоже пробовал, так работает но как решить вопрос с пагинацией?
        Если не указывать pageNumber = "{{ :page }}" пагинация не работает

        • Vladimir ответили на это сообщение.
          • Изменено

          MORION_2010 Вот с переделаной пагинацией partial/posts/default.htm

          https://testsites/blog/1 -- пагинация с выводом статей со всех категорий, сюда хотелось бы вставить /page/ перед номером страницы так как в примере

          ==
          
          <ul class="post-list">
              {% for post in posts %}
              <li>
          
          
                  <!--     <h3><a href="{{ post.url }}">{{ post.title }}</a></h3> -->
                  <h3><a href="/blog/{{ post.categories[0].slug }}/{{ post.slug }}">{{ post.title }}</a></h3>
          
                  <p class="info">
                      Posted
                      {% if post.categories.count %} in {% endif %}
                      {% for category in post.categories %}
                      <a href="{{ category.url }}">{{ category.name }}</a>{% if not loop.last %}, {% endif %}
                      {% endfor %}
                      on {{ post.published_at|date('M d, Y') }}
                  </p>
          
                  <p class="excerpt">{{ post.summary|raw }}</p>
              </li>
              {% else %}
              <li class="no-data">{{ __SELF__.noPostsMessage }}</li>
              {% endfor %}
          </ul>
          
          {% if posts.lastPage > 1 %}
          <ul class="pagination">
              {% if posts.currentPage > 1 %}
               <li><a href="/{{ this.page.baseFileName }}/{{ posts.currentPage -1}}">&larr; Prev</a> </li>
          
          
              {% endif %}
          
              {% for page in 1..posts.lastPage %}
              <li class="{{ posts.currentPage == page ? 'active' : null }}">
                  <!--     <a href="{{ this.page.baseFileName|page({ (__SELF__.pageParam): page }) }}">{{ page }}</a> -->
          
                  <a href="/{{ this.page.baseFileName }}/{{ page }}">{{ page }}</a>
          
          
              </li>
              {% endfor %}
          
              {% if posts.lastPage > posts.currentPage %}
              <li><a href="/{{ this.page.baseFileName }}/{{ posts.currentPage +1}}">Next &rarr;</a></li>
              {% endif %}
          </ul>
          {% endif %}
          • MORION_2010 ответили на это сообщение.

            Vladimir

            Спасибо, я попробую этот код

            • Vladimir ответили на это сообщение.
              • Изменено

              MORION_2010 Я там не совсем так понял что нужно. Сейчас попробую переделать.
              Там пример для пагинации в таком виде https://testsites/blog/1

              • MORION_2010 ответили на это сообщение.

                Vladimir

                из этого https://testsites/blog/1 сделать вот так https://testsites/blog/page/1 cмысл в том что-бы нумирация страниц перебиралась не в /blog/ а в /page/ ... при такой структуре я легко могу закрыть в robots.txt /page/ и исключить тем самым дубли страниц

                И так создаем 3 странички blog, blogall, post.
                blogall.htm выводит все записи в виде https://testsites/blog

                title = "blogall"
                url = "/blog"
                is_hidden = 0
                robot_index = "index"
                robot_follow = "follow"
                
                [blogPosts]
                pageNumber = "{{ :page }}"
                postsPerPage = 3
                noPostsMessage = "No posts found"
                sortOrder = "published_at desc"
                categoryPage = "cat"
                postPage = "post"
                ==
                {% partial 'posts/default' %}

                blog.htm Выводит записи с пагинацией в виде https://testsites/blog/page/1

                title = "blog"
                url = "/blog/page/:page?"
                is_hidden = 0
                robot_index = "index"
                robot_follow = "follow"
                
                [blogPosts]
                pageNumber = "{{ :page }}"
                postsPerPage = 3
                noPostsMessage = "No posts found"
                sortOrder = "published_at desc"
                categoryPage = "cat"
                postPage = "page"
                ==
                {% partial 'posts/default' %}

                post.htm вывод поста

                title = "post"
                url = "/blog/:cat/:slug"
                is_hidden = 0
                robot_index = "index"
                robot_follow = "follow"
                
                [blogPost]
                slug = "{{ :slug }}"
                categoryPage = 11
                ==
                {% component 'blogPost' %}

                Ну и наш модифицированный список постов partial/posts/default.htm

                ==
                
                <ul class="post-list">
                    {% for post in posts %}
                    <li>
                        
                        <h3><a href="/blog/{{ post.categories[0].slug }}/{{ post.slug }}">{{ post.title }}</a></h3>
                
                        <p class="info">
                            Posted
                            {% if post.categories.count %} in {% endif %}
                            {% for category in post.categories %}
                            <a href="{{ category.url }}">{{ category.name }}</a>{% if not loop.last %}, {% endif %}
                            {% endfor %}
                            on {{ post.published_at|date('M d, Y') }}
                        </p>
                
                        <p class="excerpt">{{ post.summary|raw }}</p>
                    </li>
                    {% else %}
                    <li class="no-data">{{ __SELF__.noPostsMessage }}</li>
                    {% endfor %}
                </ul>
                
                {% if posts.lastPage > 1 %}
                <ul class="pagination">
                    {% if posts.currentPage > 1 %}
                    <li><a href="/blog/page/{{ posts.currentPage -1}}">&larr; Prev</a> </li>
                
                
                    {% endif %}
                
                    {% for page in 1..posts.lastPage %}
                    <li class="{{ posts.currentPage == page ? 'active' : null }}">
                
                        <a href="/blog/page/{{ page }}">{{ page }}</a>
                
                
                    </li>
                    {% endfor %}
                
                    {% if posts.lastPage > posts.currentPage %}
                    <li><a href="/blog/page/{{ posts.currentPage +1}}">Next &rarr;</a></li>
                    {% endif %}
                </ul>
                {% endif %}

                Теперь у нас
                по https://testsites/blog все посты
                по https://testsites/blog/page/1 посты по страницам
                по https://testsites/blog/категория/слагпоста пост

                • MORION_2010 ответили на это сообщение.

                  Vladimir

                  Это проверил все работает.

                  под заголовком есть строка с переходом на категорию, что нужно добавить что-бы она заработала ?

                  {% if post.categories.count %} in {% endif %}
                              {% for category in post.categories %}
                              <a href="{{ category.url }}">{{ category.name }}</a>{% if not loop.last %}, {% endif %}
                              {% endfor %}

                  скопировать шаблон категорий и там править ?

                  @MORION_2010 и @Vladimir, пожалуйста, оборачивайте ссылки на любые сайты, которые вы используете для примеров в косые кавычки (``).

                  Сейчас я самостоятельно все исправил, просто имейте ввиду в будущем.

                    • Изменено

                    reazzon Откуда такая необходимость?
                    ------------------------------------------------
                    test http://ya.ru http://ya.ru
                    Эт чтобы они не работали как ссылки получается. И какая разница будут они ссылками или текстом?

                      Vladimir в плане СЕО плохо reazzon ок, просто с редактором поначалу не совсем освоился теперь буду обворачивать

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

                      А вот еще такой нюанс .... есть несколько страниц (портфолио, блог, каталог с фото) можно ли выводить на определенной странице свою категорию но так чтобы они не выводились на странице блога .... например страница портфолио = категория портфолио и все страницы которые в нее входят

                      • Vladimir ответили на это сообщение.

                        MORION_2010 там где выводится список постов добавь условие что то типа

                        {% if post.categories[0].slug!='portfolio' %}
                        //Тут выводятся посты
                        {% endif %}

                        И посты с категорией porfolio не будут видны.

                        • MORION_2010 ответили на это сообщение.
                          месяц спустя

                          А если наоборот, нужно вывести посты одной категории все остальные скрыть (их там 10шт) как тогда перестроить конструкцию?

                          вместо != не равно, поставить == равно