crowd / ptt
CROWD 基础 CMS
Requires
- php: >=5.6
- smottt/wideimage: dev-master
- tpyo/amazon-s3-php-class: dev-master
- dev-master
- v4.0.2
- v4.0.1
- v4.0.0
- v3.0.10
- v3.0.9
- v3.0.8
- v3.0.7
- v3.0.6
- v3.0.5
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.0.13
- v2.0.12
- v2.0.11
- v2.0.10
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5.5
- v2.0.5.4
- v2.0.5.3
- v2.0.5.2
- v2.0.5.1
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.x-dev
- v1.0.23
- v1.0.22
- v1.0.21
- v1.0.20
- v1.0.19
- v1.0.18
- v1.0.17
- v1.0.16
- v1.0.15
- v1.0.14
- v1.0.13
- v1.0.12
- v1.0.11
- v1.0.10
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-dependabot/npm_and_yarn/Crowd/PttBundle/Resources/public/admin/dev/vendor-static/selectize/grunt-1.5.3
- dev-dependabot/npm_and_yarn/Crowd/PttBundle/Resources/public/admin/dev/vendor-static/selectize/karma-6.3.16
- dev-dependabot/npm_and_yarn/Crowd/PttBundle/Resources/public/admin/dev/vendor-static/selectize/i-0.3.7
- dev-dependabot/npm_and_yarn/Crowd/PttBundle/Resources/public/admin/dev/vendor-static/selectize/tar-2.2.2
- dev-dependabot/npm_and_yarn/Crowd/PttBundle/Resources/public/admin/dev/vendor-static/selectize/hosted-git-info-2.8.9
- dev-dependabot/npm_and_yarn/Crowd/PttBundle/Resources/public/admin/dev/vendor-static/selectize/ini-1.3.7
- dev-dependabot/npm_and_yarn/Crowd/PttBundle/Resources/public/admin/dev/vendor-static/selectize/websocket-extensions-0.1.4
- dev-dependabot/npm_and_yarn/Crowd/PttBundle/Resources/public/admin/dev/vendor-static/selectize/jquery-3.5.0
- dev-aws
- dev-colectania
- dev-colacao
- dev-gdi
- dev-objects-css
- dev-objects
- dev-trans-objects
- dev-ark-branch
- dev-forms
- dev-stable
- dev-doctrine
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
添加一个数组。它应包含每个包的一个项。每个项都必须有 bundle
和 controllerClassPrefix
键。这将为 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'
class
和 parameters
都是可选的
语言
为键 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'; }
通用
您可以通过在控制器中实现它们来创建自己的 listAction
、editAction
和 cancelAction
方法。
要使用自定义模板,在 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)' 在 listAction
、editAction
和 deleteAction
调用之前。它应返回一个包含两个项目的数组:第一个项目是一个布尔值,表示是否允许访问;第二个项目是错误消息(如果有)。
表单
本节介绍表单的创建及其配置。
通用方法
默认情况下,这由 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
实体内部,将它们添加到 static
或 trans
数组中。
默认
每个字段都有以下默认属性 始终。
- 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
)。
您可以使用sortBy
和filterBy
属性来过滤或排序列表。两者都是键/值数组,例如这样。两者之一是必需的。
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
设置为输入类型。
您必须将showErrors
和mapped
设置为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可以打印其名称。
此实体将在列表中显示。
您可以使用sortBy
和filterBy
属性来过滤或排序列表。两者都是键/值数组,例如这样。两者之一是必需的。
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
设置为输入类型。
将showErrors
和mapped
设置为false。在options中,将属性entity
填充为相关实体的名称。该实体必须有一个relatedId
属性。
附加说明
对于php 5.4,您需要在2.3上指定doctrine特定版本。
"doctrine/common": "2.3"