c975l/pageedit-bundle

创建、修改和管理网页


README

PageEditBundle 执行以下操作

  • 显示请求的页面
  • 提供工具来编辑页面的内容,除非通过代码编辑器进行
  • 与您的网站设计集成
  • 保护 twig 代码不被格式化
  • 在替换之前存档文件,以便能够检索旧版本
  • 允许创建受管理文件的 sitemap.xml,设置它们的更改频率和优先级
  • 允许将特定模板存储在 protected 文件夹中以便显示但不能修改
  • 允许创建网页的 PDF 版本

当然,仍然可以直接使用编辑器修改这些文件。

此 Bundle 依赖于使用 TinyMcejQueryBootstrap

PageEditBundle 专用网页.

PageEditBundle API 文档.

包安装

步骤 1: 下载包

使用 Composer 安装库

    composer require c975l/pageedit-bundle

步骤 2: 启用包

然后,通过将它们添加到项目中的 app/AppKernel.php 文件中注册的包列表来启用包

<?php
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            new c975L\PageEditBundle\c975LPageEditBundle(),
        ];
    }
}

步骤 3: 配置包

检查它们的配置依赖项

对于 KnpSnappyBundle,您可以使用以下配置,如果它适合您的需求。

knp_snappy:
    process_timeout: 20
    temporary_folder: "%kernel.cache_dir%/snappy"
    pdf:
        enabled: true
        binary: "%kernel.project_dir%/../vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64"
        options:
            print-media-type: true
            page-size: A4
            orientation: 'portrait'
            encoding : utf-8
            dpi: 300
            images: true
            image-quality: 80
            margin-left: 10mm
            margin-right: 10mm
            margin-top: 10mm
            margin-bottom: 10mm
    image:
        enabled: false

c975LPageEditBundle 的 v2.0+ 版本使用 c975L/ConfigBundle 来管理配置参数。使用路由 "/pages/config" 以及适当的用户角色来修改它们。

从 v1.x 升级?请检查 UPGRADE.md

如果您使用 Git 进行版本控制,您需要在 .gitignore 中添加完整的路径 templates/[folderPages]public/images/[folderPages],否则 Git 将更改所有内容。

步骤 4: 启用路由

然后,通过将它们添加到项目中的 app/config/routing.yml 文件来启用路由

c975_l_page_edit:
    resource: "@c975LPageEditBundle/Controller/"
    type: annotation
    prefix: /
    #Multilingual website use the following
    #prefix: /{_locale}
    #defaults:   { _locale: '%locale%' }
    #requirements:
    #    _locale: en|fr|es

步骤 5: 链接和初始化 TinyMce

强烈建议使用 从第三方包覆盖模板功能 以完全与您的网站集成。

为此,只需在您的 app 中创建以下结构 templates/bundles/c975LPageEditBundle/views/,然后复制 layout.html.twig 文件到其中,以覆盖现有的 Bundle 文件,然后应用您需要的更改,例如语言等。

layout.html.twig 中,它将主要扩展您的布局并定义特定变量,即

{% extends 'layout.html.twig' %}

{# Defines specific variables #}
{% set title = 'PageEdit (' ~ title ~ ')' %}

{% block content %}
    {% block pageedit_content %}
    {% endblock %}
{% endblock %}

建议使用 Tinymce Cloud 版本。您需要一个 免费 API 密钥或者 您可以下载并将其链接到您的项目 https://www.tinymce.com/download/

如果您想保留所有可用的工具,并且不对现有的Tinymce进行任何更改,您不需要覆盖tinymceInit.html.twig。您只需要在parameters.yml中提供您的tinymceApiKey(见上文),如果您使用的是云版本,以及tinymceLanguage(+ 将相应的文件上传到您的服务器上的public/vendor/tinymce/[tinymceLanguage].js)。否则,您需要覆盖tinymceInit.html.twig

步骤 6:文件保存的开始和结束模板定义

当Twig文件保存时,它将与Resources/views/skeleton.html.twig的内容连接,以获得完整的文件。

此文件必须扩展您的布局,以便正确显示。建议您不要覆盖此文件,但如果您这样做,请确保保持{% block pageedit_content %}{% endblock %}不变,因为它们是定义内容的入口和出口点。

如何使用

显示页面的URL是http://example.com/pages/{page},编辑的URL是http://example.com/pages/modify/{page},显示PDF的URL是http://example.com/pages/pdf/{page}

如果用户已识别并且有访问权限,则在标题下方显示一个工具栏。

在Twig中,可以通过以下方式链接到页面:<a href="{{ path('pageedit_display', { 'page': 'slug' }) }}">页面标题</a>

可用的不同路由(命名自解释)如下

  • pageedit_home
  • pageedit_config
  • pageedit_display
  • pageedit_pdf
  • pageedit_create
  • pageedit_modify
  • pageedit_duplicate
  • pageedit_delete
  • pageedit_dashboard
  • pageedit_upload
  • pageedit_slug
  • pageedit_links
  • pageedit_help

创建PDF

PageEditBundle使用KnpSnappyBundle来生成PDF,它本身使用wkhtmltopdfwkhtmltopdf要求包含的文件(如样式表)使用绝对URL包含。但是,有一个已知的问题与SSL有关,请参阅#3001,这迫使您降级openssl,如Gist中所述。

您可以通过包含包含文件的整个内容来避免此问题,这正是wkhtmltopdf所做的事情,在您的HTML输出中,您可以使用以下代码轻松地集成它们,就像c975L/SiteBundle所做的那样,使用c975L/IncludeLibraryBundle

{# in your layout.html.twig > head #}
    {% if display == 'pdf' %}
        {{ inc_content('bootstrap', 'css', '3.*') }}
        {{ inc_content(absolute_url(asset('css/styles.min.css')), 'local') }}
    {% else %}
        {{ inc_lib('bootstrap', 'css', '3.*') }}
        {{ inc_lib('cookieconsent', 'css', '3.*') }}
        {{ inc_lib('fontawesome', 'css', '5.*') }}
        {{ inc_lib(absolute_url(asset('css/styles.min.css')), 'local') }}
    {% endif %}

集成子页面

要在子文件夹中添加子页面,只需在URL的语义字段中使用"/"作为分隔符即可。

首页特定

可以通过PageEdit管理首页,但由于它位于网站的根目录,因此具有特殊性。它的名称是"home",不能更改。

保护特定模板

如果您需要保护特定模板(包含大量Twig标签、Twig变量设置等,或者您不希望最终用户能够修改它们,以防止破坏网站),只需将这些模板放入templates/[folderPages]/protected,它们将与其他模板一样显示,并包含在网站地图中,但不能进行修改。您只需将模板内容封装在skeleton.html.twig中即可。

使用Twig扩展来自动构建菜单

您可以使用提供的Twig扩展folder_content()轻松根据特定文件夹的内容构建菜单,为此请使用以下代码

{% set files = folder_content('specific_folder') %}
<ul class="nav navbar-nav">
    <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Title <span class="caret"></span></a>
        <ul class="dropdown-menu">
            {% for file, title in files %}
                <li><a href="{{ path('pageedit_display', { 'page': file }) }}">{{ title }}</a></li>
            {% endfor %}
        </ul>
    </li>
</ul>

将现有文件迁移到PageEdit

要将现有文件迁移,只需将您的现有模板移动到templates/[folderPages]文件夹中(folderPages已在上述步骤3中定义),访问PageEdit仪表板并进行修改。将为新文件添加骨架,旧文件将被存档。

您可以使用命令 git rm -r --cached templates/[folderPages] 将其从 Git 中移除,如果文件夹之前已经被索引。 如果您使用 Git 作为版本控制系统并且已将此文件夹添加到 .gitignore 中,请不要忘记制作副本,否则您的文件将在下一次提交时被删除!

如果文件已被 Git 删除,只需使用以下代码

git log #Gives you latest commit
git checkout <id_commit> #Indicate here the id of the commit obtained above
#Access to your files, copy/paste them somewhere else
git checkout HEAD #Get back to latest version

创建网站地图

在控制台中,使用 php bin/console pageedit:createSitemap 在您的项目 web 文件夹中创建 sitemap-[folderPages].xml。您可以使用 crontab 每天生成它。您可以将其添加到分组所有网站地图的 sitemap-index.xml 文件中,或者如果您只有一个网站地图,可以直接使用它。

如果这个项目 帮助您减少开发时间,您可以通过顶部的“赞助”按钮来赞助我:)