Any way in Expression Engine to simulate Wordpress' shortcode functionality?

倾然丶 夕夏残阳落幕 提交于 2019-12-24 14:50:28

问题


I'm relatively new to Expression Engine, and as I'm learning it I am seeing some stuff missing that WordPress has had for a while. A big one for me is shortcodes, since I will use these to allow CMS users to place more complex content in place with their other content.

I'm not seeing any real equivalent to this in EE, apart from a forthcoming plugin that's in private beta.

As an initial test I'm attempting to fake shortcodes by using delimited strings (e.g. #foo#) in the content field, then using a regex to pull those out and pass them to a function that can retrieve the content out of EE's database.

This brings me to a second question, which is that in looking at EE's API docs, there doesn't appear to be a simple means of retrieving the channel entries programmatically (thinking of something akin to WP's built-in get_posts function).

So my questions are:

a) Can this be done? b) If so, is my method of approaching it reasonable? Or is there something stupidly obvious I'm missing in my approach?

To reiterate, my main objective here is to have some means of allowing people managing content to drop a code in place in their content that will be replaced with channel content.

Thanks for any advice or help you can give me.


回答1:


Here's a simple example of the functionality you're looking for.

1) Start by installing Low Replace.

2) Create two Global Variables called gv_hello and gv_goodbye with the values "Hello" and "Goodbye" respectively.

3) Put this text into the body of an entry:

[say_hello]

Nice to see you.

[say_goodbye]

4) Put this into your template, wrapping the Low Replace tag around your body field.

{exp:low_replace find="[say_hello]|[say_goodbye]" replace="{gv_hello}|{gv_goodbye}" multiple="yes" } {body} {/exp:low_replace}

5) It should output this into your browser:

Hello

Nice to see you.

Goodbye

Obviously, this is a really simple example. You can put full blown HTML into your global variable. For example, we've used that to render a complex, interactive graphic that isn't editable but can be easily dropped into a page by any editor.

Unfortunately, due to parse order issues, EE tags won't work inside Global Variables. If you need EE tags in your short code output, you'll need to use Low Variables addon instead of Global Variables.




回答2:


Continued from the comment:

Do you have examples of the kind of shortcodes you want to support/include? Because i have doubts if controlling the page-layout from a text-field or wysiwyg-field is the way to go.

If you want editors to be able to adjust layout or show/hide extra parts on the page, giving them access to some extra fields in the channel, is (imo) much more manageable and future-proof. For instance some selectfields, a relationship (or playa) field, or a matrix, to let them choose which parts to include/exclude on a page, or which entry from another channel to pull content from.

As said in the comment: i totally understand if you want to replace some #foo# tags with images or data from another field (see other answers: nsm-transplant, low_replace). But, giving an editor access to shortcodes and picking them out, is like writing a template-engine to generate ee-template code for the ee-template-engine.

Using some custom fields to let editors pick and choose parts to embed is, i think, much more manageable.

That being said, you could make a plugin to parse the shortcodes from a textareas content, and then program a lot, to fetch data from other modules you want to support. For channel entries you could build out of the channel data library by objectiveHTML. https://github.com/objectivehtml/Channel-Data




回答3:


I hear you, I too miss shortcodes from WP -- though the reason they work so easily there is the ubiquity of the_content(). With the great flexibility of EE comes fewer blanket solutions.

I'd suggest looking at NSM Transplant. It should fit the bill for you.




回答4:


There is also a plugin called Shortcode, which you can find here at Devot-ee A quote from the page:

Shortcode aims to allow for more dynamic use of content by authors and editors, allowing for injection of reusable bits of content or even whole pieces of functionality into any field in EE



来源:https://stackoverflow.com/questions/11730506/any-way-in-expression-engine-to-simulate-wordpress-shortcode-functionality

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!