crowd/ptt

CROWD 基础 CMS

安装数: 1 518

依赖关系: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 0

开放问题: 8

语言:JavaScript

v4.0.2 2017-01-31 07:44 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:53:06 UTC


README

Crowd\PttBundle 包添加到 src 文件夹,并在 AppKernel 文件的 $bundles 数组中添加以下行以注册它

    new Crowd\PttBundle\PttBundle()

在项目的 composer.json 文件中添加以下库

    "smottt/wideimage" : "dev-master",
    "tpyo/amazon-s3-php-class" : "dev-master"

然后运行 composer update 命令。

配置

创建文件 app/config/ptt.yml

路由

为键 bundles 添加一个数组。它应包含每个包的一个项。每个项都必须有 bundlecontrollerClassPrefix 键。这将为 PttController 的每个控制器子类创建路由。

    bundles:
        -
            bundle : AdminBundle
            controllerClassPrefix : App\AdminBundle\Controller\

如果项目有不同语言,您可以在路由控制器 URL 中添加 "_local" 前缀以及要求。参考以下示例

/**
* @Route("/{_locale}/team/", name="team", requirements={"_locale": "ca|es|en"});
* @Template()
*/

管理配置

对于键 admin,创建一个包含后端配置属性的数组。sidebar 数组包含多个项,每个项都有自己的键

    admin:
        title : 'Ptt Admin Demo'
        default_url : post_list
        numberOfResultsPerPage : 50
        sidebar :
            -
                path : post_list
                label : 'Posts'
                class : 'demoClass'
                parameters :
                    id : 1
            -
                label : ‘dropdown’
                subSections:
                    -
                        path : role_list
                        label : 'Roles'

classparameters 都是可选的

语言

为键 languages 添加一个语言键/值数组(如有必要)。键应该是该语言的 ISO 639-1 代码。值是在后端要显示的标签。

    languages :
        ca : 'Català'
        es : Español
        en : English
        fr : French

S3

如果您想能够将内容上传到 Amazon S3 服务器,您需要添加带有所有所需参数的键 s3

    s3:
        force : true
        accessKey : ******
        secretKey : ******
        bucket : example
        dir : 'example/'
        url : http://example.s3.amazonaws.com
        prodUrl : http://example.cloudfront.net/

强制允许 'PttMediaController' 将内容正文中插入的图片上传到 S3。

SwiftMail

Swift Mailer 可以集成到任何用 PHP 5 编写的 Web 应用程序中,提供了一种灵活且优雅的面向对象方法来发送电子邮件,具有许多功能。

您应该在 parameters.yml 中定义 smtp 服务器

    mailer_transport: gmail
    mailer_host: ~
    mailer_user: pau@crowd-studio.com
    mailer_password: ******

使用此代码可以在控制器中发送电子邮件。您可以更改主题、电子邮件发件人、收件人。您可以定义电子邮件的 twig 模板或添加一些简单的 HTML。

$message = \Swift_Message::newInstance()
        ->setSubject('Subject goes here')
        ->setFrom('email@from.com')
        ->setTo('email@to.com')
        ->setBody($this->renderView('FrontendBundle:MailTemplates:mailtemplate.html.twig',
                array('name' => $youCanPassVariables)));
        $this->get('mailer')->send($message);

控制器

要在控制器中使用 PttController,请添加一个 use 语句并创建其子类。

    use Crowd\PttBundle\Controller\PttController;

    class FooController extends PttController {

默认情况下,PttController 有 3 个方法。

列表

它将列出与控制器同名的实体。例如,名为 FooController 的控制器将列出名为 Foo 的实体。

默认情况下,列表中显示的唯一字段是 Title。您可以通过在您的新控制器中实现 fieldsToList 方法来更改此设置。此方法必须返回一个键/值数组,其中包含要列出的字段/标签。

    protected function fieldsToList()
    {
        return array(
            'title' => 'Title',
            'relatedUrl' => 'URL',
            'published' => 'Published'
            );
    }

实现 listTitle 方法以覆盖默认列表标题。

    protected function listTitle()
    {
        return 'My new list Entity title';
    }

在列表中,实体将按默认值使用数组的第一个元素进行排序。用户可以通过单击行标题来更改排序(如果您使用的是默认的 Ptt 模板)。

可排序列表

要使列表可拖放排序,您应该在实体中添加 _order 字段。

-
        name : _order
        type : number
        options :
            label : 'Ordre'
            attr : ~
        validations : ~
     /**
     * @var integer
     *
     * @ORM\Column(name="_order", type="text")
     */
    private $_order;

    /**
     * Set _order
     *
     * @param integer $_order
     *
     * @return Social
     */
    public function set_Order($_order)
    {
        $this->_order = $_order;

        return $this;
    }

    /**
     * Get _order
     *
     * @return integer
     */
    public function get_Order()
    {
        return $this->_order;
    }

删除

它将删除一个实体。要决定是否继续删除,请实现方法 continueWithDeletion。此方法必须返回一个数组。第一个元素必须是表示是否继续删除的 boolean 值,第二个是一个包含错误消息的 string(如果没有错误则为空字符串)。

    protected function continueWithDeletion($entity)
    {
        if (//custom validation using $entity) {
            //not valid
            return array(false, 'Hey, this is an error message');
        } else {
            //valid
            return array(true, '');
        }
    }

在删除之前,将调用方法 beforeDeletion。实现它以删除相关实体。

    protected function beforeDeletion($entity)
    {
        //remove entities related to $entity
    }

编辑

它显示实体表单及其所有字段。阅读《表单》部分了解如何创建表单。

实现 editTitle 方法以覆盖默认列表标题。

    protected function editTitle()
    {
        return 'My new edit Entity title';
    }

通用

您可以通过在控制器中实现它们来创建自己的 listActioneditActioncancelAction 方法。

要使用自定义模板,在 Resources/views/Foo/action.html.twig 文件夹内创建它。

实现 entityInfo 方法以返回有关实体的基本信息,不同于默认信息。

    protected function entityInfo()
    {
        return array(
            'simple' => 'Foo',
            'lowercase' => 'foo',
            'plural' => 'foos'
            );
    }

方法 userIsRole($role) 返回一个布尔值,表示用户是否有该角色。

方法 userRole() 返回一个包含用户角色的字符串。

方法 'allowAccess($methodName, $entity = false)' 在 listActioneditActiondeleteAction 调用之前。它应返回一个包含两个项目的数组:第一个项目是一个布尔值,表示是否允许访问;第二个项目是错误消息(如果有)。

表单

本节介绍表单的创建及其配置。

通用方法

默认情况下,这由 PttController 完成。这就是为什么只有在您在控制器中实现 editAction 方法时才需要它。

要创建表单,将其作为服务访问

    $pttForm = $this->get('pttForm');

要添加实体,使用方法 setEntity

    $pttForm->setEntity($entity);

其他可用方法有

    //Returns boolean indicating if the sent data is valid or not
    $pttForm->isValid();

    //Persists and flushes the entity
    $pttForm->save();

    //Returns the success message
    $pttForm->getSuccessMessage();

    //Returns the error message
    $pttForm->getErrorMessage();

    //Returns the html code for the form
    $pttForm->createView();

如何创建表单

创建一个实体并将其作为 PttEntity 的子类。请记住添加 use 语句。

    use Crowd\PttBundle\Form\PttEntity;

    class MyEntity extends PttEntity {

此类现在有一些额外的属性。如果您想创建一个可翻译的网站,此实体必须只包含静态属性。创建另一个具有相同名称但后缀为 Trans 的实体,例如 MyEntityTrans,并将其作为 PttTransEntity 的子类。同样,您需要使用 use 语句。

    use Crowd\PttBundle\Form\PttTransEntity;

    class MyEntityTrans extends PttTranEntity {

这将使此实体具有一些额外的属性。

在相同包的 Form 文件夹内创建一个 YAML 文件。文件名必须与实体名称相同(在这种情况下为 MyEntity.yml)。重要:即使实体是可翻译的,也只需要一个文件。

在此文件中,创建一个名为 static 的键,如果需要,再创建一个名为 trans 的键。

还有两个其他可选键,可以针对每个表单进行覆盖:errorMessage,这是在表单有错误时显示的错误消息;以及 successMessage,这是在表单没有错误且内容可以保存时显示的消息。

输入类型

创建输入/字段的方式在它们是可翻译的还是不可翻译的情况下都是一样的。只需记住根据它们是否位于 MyEntity 实体或 MyEntityTrans 实体内部,将它们添加到 statictrans 数组中。

默认

每个字段都有以下默认属性 始终

    -
        name : #the name of the property
        type : #type of field
        options : #array with options
        validations : #array with validations // empty by default
        mapped : #indicates if the field is mapped in the form // true by default

您可以配置这些属性中的每一个。选项是更定制的属性,因为它是允许我们配置字段的属性。当然,类型和名称属性也非常重要。名称必须与实体中的名称匹配。

默认情况下,有一些可用的 options

label 键指示字段的标签。键 attr 是一个键/值数组,您可以在其中添加任何您想要的内容。最著名的 attr 将是 class 和自定义的 data-something 属性。

它将看起来像

    options:
        label : 'Label of the field`
        attr :
            class : 'classOfTheInput`
            data-something : 'somethingElse'

以下是可用的验证:- not_blank - not_empty(仅在selects中有效)- password - email - unique - number。在yml中,您应将其作为键/值数组添加(验证类型/显示的消息)。例如

    validations :
        not_blank : 'The field is required`
输入文本

text设置为输入类型。

您可以通过在options中使用maxLength属性来设置最大长度。

输入自动完成

autocomplete设置为输入类型。

options中,您必须添加实体(entity)和数据收集的列(searchfield)。

您可以使用sortByfilterBy属性来过滤或排序列表。两者都是键/值数组,例如这样。两者之一是必需的。

    sortBy :
        title : asc
        author : asc
    filterBy :
        eventId : 1
输入URL

url设置为输入类型。

输入类型url不需要任何额外配置,默认即可。

输入隐藏

hidden设置为输入类型。

输入类型hidden不需要任何额外配置,默认即可。

输入数字

number设置为输入类型。

输入数字不需要任何额外配置,默认即可。

输入复选框

checkbox设置为输入类型。

输入复选框不需要任何额外配置,默认即可。

输入密码

password设置为输入类型。

输入密码文本不需要任何额外配置,默认即可。

您只应在实际的密码字段中使用它。如果您添加此字段,您必须也为您的事务添加salt属性。您不需要将salt实体添加到表单中。

输入文件

file设置为输入类型。

options数组内部,您必须添加type属性。可用的类型有:- image - file

存储:将options中的键s3设置为true以将文件上传到先前配置的S3服务器。将options中的键cdn设置为true以将文件上传到先前配置的CDN服务器。

可编辑options中的键delete设置为false以禁用用户更改图片。

图片

添加属性sizes并将其设置为包含大小的数组。这些大小将用于创建图片。每个子数组都有w键(宽度)和h键(高度)。如果两者都设置为0,则图片大小将自由。

    type : image
    sizes :
        -
            w : 100
            h : 100
        -
            w : 200
            h : 200

图片的名称将为w-h-randomNameStoredInTheProperty.jpg

文件

如果您选择file,它将上传文件并保留扩展名。文件的名称将为randomNameStoredInTheProperty.jpg

输入图例

legend设置为输入类型。

options中的label属性是显示的图例。不需要添加validations,但将mapped设置为false非常重要。

输入多行文本

textarea设置为输入类型。

默认情况下,它将显示一个简单的多行文本输入。您可以在options数组内部添加属性type来配置它。可用的选项是:- markdown

Markdown

它将显示一个高级markdown编辑器。您应该在options中的attr属性内部添加data-height属性来设置多行文本输入的高度。

    attr :
        data-height : 300
    type : markdown
输入多项选择

多项选择是一个具有不同布局的模块的可排序数组。模块应声明为具有前缀'module'的实体。在options中,您可以在empty参数中声明选择器的默认值。您应该在options中的modules标签内部放置不同的模块,并使用label作为选择器中显示的标签和引用的entity

-
        name : moduleSelector
        type : multipleEntity
        mapped : false
        showErrors : false
        options :
            empty : Selecciona un element de la llista
            label : Mòdul
            modules :
                -
                    label : Text destacat
                    entity : moduleOutstandingText
                -
                    label : Text amb Títol
                    entity : moduleTitleText
                -
                    label : Imatge 100% amplada
                    entity : moduleImage100
                -
                    label : Imatge 80% amplada
                    entity : moduleImage80
                -
                    label : 2 imatges 2 columnes
                    entity : moduleImage2col
输入相册

gallery设置为输入类型。

您必须将showErrorsmapped设置为false

options中,您必须告知每个加载的图片对应的实体。该实体应有一个名为“image”的图片字段,选项类型设置为“gallery”。

相关实体图像字段示例

    -
        name : image
        type : file
        options :
            label : 'Image'
            attr : ~
            type : gallery
            sizes :
                -
                    w : 600
                    h : 400
                -
                    w : 1400
                    h : 600
                -
                    w : 1000
                    h : 0
        validations : ~

画廊字段示例

    -
        name : galleryImage
        type : gallery
        showErrors : false
        mapped : false
        options :
            label : 'Image'
            entity : GalleryImage
        validations : ~

mapped : false

类型选择

select设置为输入类型。

它有一个可选的empty属性,您可以将其添加到options数组中。它将是select中的默认选项。

    empty : 'Select one option'

options数组内部,您必须添加type属性。可用类型有:- 静态 - 实体

静态

options数组中添加一个键值数组options。这些将在select中显示为键值选项。例如

    empty : Select
    options :
        1 : Header
        2 : Footer
        3 : Others
实体

标准配置是在options数组中添加entity键。仅添加实体的名称,并确保实体位于同一包中。您还必须在实体中添加方法__toString,以便select可以打印其名称。

此实体将在列表中显示。

您可以使用sortByfilterBy属性来过滤或排序列表。两者都是键/值数组,例如这样。两者之一是必需的。

    sortBy :
        title : asc
        author : asc
    filterBy :
        eventId : 1

如果您想创建多对多关系,您必须创建相关实体。此实体必须有2个字段,一个用于当前objectId,另一个用于relatedObjectId。名称是可定制的。要启用此功能,您必须在options数组中添加multiple键。

重要:如果select是多选的,则必须将字段的mapped选项设置为false

multiple内的属性包括:- relatingEntity:相关实体的名称 - me:标识当前实体ID的属性(如果表单是事件表单,则是eventId)- them:标识相关实体ID的属性(如果表单是事件表单,则是artistId)

如果我们处于Event实体中,并希望将其与多个Artist实体相关联,则YAML应如下所示。

    entity : Artist
    multiple :
        relatingEntity : EventArtist
        me : eventId
        them : artistId

如果您想在艺术家表单中显示相同的关系,您必须切换值。在这个例子中,它看起来像这样。

    entity : Event
    multiple :
        relatingEntity : EventArtist
        me : artistId
        them : eventId
类型选择多

第二个选择器取决于第一个选择器的两个选择器。

您必须向实体添加两个更多字段:[field_name]_model和[field_name]_title(最后一个是可选的)。

在YML中,您应定义返回实体的数量和第一个选择器的实体。

    -
        name : slider
        type : selectMultiple
        options :
            label : 'Select Multiple'
            limit : 20
            empty : '-- Selecciona el tipo --'
            entities :
                -
                    entity : Activity
                    label : Actividad
                -
                    entity : Exhibition
                    label : Exposición
                -
                    entity : Publication
                    label : Publicación
类型实体

entity设置为输入类型。

showErrorsmapped设置为false。在options中,将属性entity填充为相关实体的名称。该实体必须有一个relatedId属性。

附加说明

对于php 5.4,您需要在2.3上指定doctrine特定版本。

"doctrine/common": "2.3"