Skip to main content

Somtimes useful extensions to Products.slideshowfolder

Project description

Somtimes useful extensions to Products.slideshowfolder

SlideshowImage

The SlideshowImage content type uses a reference to an existing normal image somewhere else in the site to act as a kind of link or alias. This allows for the creation of a folder as a slideshowfolder that displays images that are actually stored elsewhere.

Start with a couple of normal folders and a normal image.

>>> portal.images
<ATFolder at /plone/images>
>>> portal.images.contentValues()
[<ATImage at /plone/images/foo-image-title>]
>>> foo_image = portal.images['foo-image-title']
>>> folder.contentValues()
[<ATFolder at /plone/Members/test_user_1_/slideshow>]
>>> folder.slideshow.contentValues()
[<ATImage at
  /plone/Members/test_user_1_/slideshow/bar-image-title>]

Open a browser and login as a user who can add SlideshowImages.

>>> from Products.Five import testbrowser
>>> from Products.PloneTestCase import ptc
>>> portal.error_log._ignored_exceptions = ()
>>> member_browser = testbrowser.Browser()
>>> member_browser.handleErrors = False
>>> member_browser.open(portal.absolute_url())
>>> member_browser.getLink('Log in').click()
>>> member_browser.getControl(
...     'Login Name').value = ptc.default_user
>>> member_browser.getControl(
...     'Password').value = ptc.default_password
>>> member_browser.getControl('Log in').click()
>>> member_browser.open(folder.slideshow.absolute_url())

Add a SlideshowImage. Set the “Image Reference” field to the real image in the images folder.

>>> member_browser.getLink(
...     url='createObject?type_name=SlideshowImage').click()
>>> member_browser.getControl(
...     'Image Reference').value = foo_image.UID()

Since all values are taken from the referenced image, none of the normal image fields are editable.

>>> member_browser.getControl('Title')
Traceback (most recent call last):
LookupError: label 'Title'
>>> member_browser.getControl('Description')
Traceback (most recent call last):
LookupError: label 'Description'
>>> member_browser.getControl(name='image_file')
Traceback (most recent call last):
LookupError: name 'image_file'
>>> member_browser.getControl('Creators')
Traceback (most recent call last):
LookupError: label 'Creators'

Save the new SlideshowImage.

>>> member_browser.getControl('Save').click()

The values for the fields are pulled in from the referenced image.

>>> print member_browser.contents
<...
...Changes saved...
...Foo Image Title...
...Foo CreÃtor...
...Foo Image description...
>>> member_browser.getLink('Click to view full-size image')
<Link text='Foo Image Title[IMG] [IMG]
Click to view full-size image...'
url='http://nohost/plone/Members/test_user_1_/slideshow/foo-image-title/image_view_fullscreen'>
>>> member_browser.open(
...     folder.slideshow['foo-image-title'].absolute_url())
>>> print member_browser.contents
GIF...

The catalog also reflects the data from the referenced image.

>>> len(portal.portal_catalog(
...     Type='Slideshow Image',
...     Description='Foo Image description'))
1

The catalogged and indexed values for the fields are also updated when the original image is edited.

Open a browser and log in as the image’s creator.

>>> owner_browser = testbrowser.Browser()
>>> owner_browser.handleErrors = False
>>> owner_browser.open(portal.absolute_url())
>>> owner_browser.getLink('Log in').click()
>>> owner_browser.getControl(
...     'Login Name').value = ptc.portal_owner
>>> owner_browser.getControl(
...     'Password').value = ptc.default_password
>>> owner_browser.getControl('Log in').click()

Change the image metadata.

>>> owner_browser.open(foo_image.absolute_url()+'/edit')
>>> owner_browser.getControl(
...     'Description').value = 'Foo Image edited'
>>> owner_browser.getControl('Save').click()

The catalog now reflects the changes for the SlideshowImage that references the image.

>>> len(portal.portal_catalog(
...     Type='Slideshow Image',
...     Description='Foo Image description'))
0
>>> len(portal.portal_catalog(
...     Type='Slideshow Image',
...     Description='Foo Image edited'))
1

Slideshow Folders

SlideshowImages is in a folder using the slideshowfolder view behave just like regular images.

Make the folder into a slideshowfolder.

>>> member_browser.open(folder.slideshow.absolute_url())
>>> member_browser.getLink('Make slideshow').click()
>>> print member_browser.contents
<...
...This folder is now designated a slideshow...

Check that the SlideshowImage is included in the slideshow by inspecting the JavaScript. The collective.slideshowfolder package also extends the caption to include the image’s creator for credit.

>>> member_browser.open(
...     folder.slideshow.absolute_url()+'/slideshow_settings.js')
>>> print member_browser.contents
registerPloneFunction...
...http://nohost/plone/Members/test_user_1_/slideshow/bar-image-title/image_large...
...Photo: Foo Full NÃme...
...Bar ImÃge description...
...http://nohost/plone/Members/test_user_1_/slideshow/foo-image-title/image_large...
...Photo: Foo CreÃtor...
...Foo Image edited...

Slideshow Portlets

The collective.slideshowfolder package also provides a portlet that renders a Slideshow 2 in a portlet based on the contents of the first folder or collection specified in the “slideshow” refrence for the context.

Turn the a folder into a slideshowfolder.

>>> slideshowfolder = self.folder.slideshow
>>> self.loginAsPortalOwner()
>>> portal.portal_workflow.doActionFor(
...     slideshowfolder, 'publish')
>>> slideshowfolder.unrestrictedTraverse(
...     '@@folder_slideshow_view').makeSlideshow()

Open a browser and login as a user who can add portlets.

>>> from Products.Five import testbrowser
>>> from Products.PloneTestCase import ptc
>>> browser = testbrowser.Browser()
>>> browser.handleErrors = False
>>> browser.open(portal.absolute_url())
>>> browser.getLink('Log in').click()
>>> browser.getControl('Login Name').value = ptc.portal_owner
>>> browser.getControl('Password').value = ptc.default_password
>>> browser.getControl('Log in').click()

Add a slideshowfolder portlet.

>>> browser.getLink('Manage portlets').click()
>>> right_column = browser.getForm(index=3)
>>> right_column.getControl('Slideshow portlet').selected = True
>>> right_column.submit()
>>> browser.getControl('Save').click()
>>> browser.getLink('Log out').click()

Go to an area of the site without a slideshow.

>>> context = portal.news.aggregator
>>> browser.open(context.absolute_url())
>>> 'portletSlideshow' in browser.contents
False

Add a slideshowfolder reference for the context.

>>> context.addReference(slideshowfolder,
...                      relationship="slideshow")
<Reference sid:... tid:... rel:slideshow>

Now the slideshow portlet will be rendered.

>>> browser.open(context.absolute_url())
>>> print browser.contents
<...
...mootools...
...portletSlideshow...
...id="myShow"...
...registerPloneFunction...
...http://nohost/plone/Members/test_user_1_/slideshow/bar-image-title/image_large...

Changelog

0.8 - 2009-07-08

  • Fix the portlet add view

0.7 - 2009-03-22

  • Fix another unicode error in the caption (aaronv)

0.6 - 2009-03-21

  • Fix unicode error in the caption (aaronv)

0.5 - 2009-02-07

  • Fix a type on generated portlet JavaScript (Thanks aaronv!)

0.4 - 2008-12-03

  • Fix the portlet JavaScript

  • Make the portlet fully editable

  • More sensible height and width defaults for portlet

0.3 - 2008-12-02

  • Support for a slideshow portlet based on a reference to a slideshow folder

0.2 - 2008-11-13

  • Add the image creator as a credit in the caption

0.1 - 2008-11-12

  • Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

collective.slideshowfolder-0.8.tar.gz (12.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page