Album Tags for Images

I would like to be able to call the album tags for each image, instead of each image having individual tags.

For example: When creating an album, tags would be defined for that album and those tags would be displayed for every image within that album.
«1

Comments

  • Depending on how you want to output the tags, you could use the `tags_from_album` plugin. You could also simply use something such as `$_zp_current_album->getTags()` and output them accordingly. Or, for a different approach, you could copy over the album's tags to a new image via the `new_image` filter. The former methods are probably easier, however.
  • I tried using the tags_from_album plugin but I am having a hard time getting it to work ... not sure exactly what to put in my image.php file....
  • If you are intending these tags to be used for such things as searching there is not currently a solution. We have on our list a bulk-edit type feature for setting tags, but implementation has not begun on it.
  • Nope, just want to be able to define tags for an album and then have those same tags display with each individual image within that album.

    I enabled the tags_from_album plugin and placed the following code on my image.php, but all I got was SQL errors.

    [code]
    <?php printAllTagsFromAlbum("sasha",false,albums,'|','',false,true,1,5,1,50); ?>
    [/code]
  • Let us know the SQL errors. Off hand that call looks correct.
  • Zenphoto encountered an error
    MySQL Query ( SELECT DISTINCT t.name, t.id, (SELECT DISTINCT COUNT(*) FROM `zp_obj_to_tag` WHERE tagid = t.id AND o.type = 'albums') as count `zp_obj_to_tag`as o,`zp_tags`as t WHERE (o.objectid =10 AND o.tagid = t.id AND o.type = 'albums') ORDER by t.name ) failed. MySQL returned the error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`zp_obj_to_tag`as o,`zp_tags`as t WHERE (o.objectid =10 AND o.tagid = t.id AND o' at line 1
  • acrylian Administrator, Developer
    Actually kagutsuchi's way is a good ay for getting the direct tags of the album you are in. You will of course write a foreach loop to show them as a list.

    Regarding your function call `<?php printAllTagsFromAlbum("sasha",false,albums,'|','',false,true,1,5,1,50); ?>`. Try setting the `albums` parameter as `"albums"` (in quotes). Is the album "sasha" a toplevel album? If not you have to write "toplevel/sublevel(...)".

    Maybe you could also tell what MySQL version you are running. It seems that one value is empty on your sql but I don't know right now why that can happen.
  • MySQL 5.1.39

    "sasha" is the name of the toplevel album folder.

    I tried putting albums in quotes... Same error

    I tried putting "toplevel(sasha)".... same error.
  • There is an error in the function code which is resulting in the string `zp_tagsas` where it should read `zp_tags AS`. (Note the missing space.) I will get a correction made to this in tonight's nightly build.

    Thank you for posting the SQL error. Could not have seen this without that hint.
  • acrylian Administrator, Developer
    Ah, now I see it as well...
  • So where do I need to adjust the code? Which file? im not seeing it in tags_from_album.php
  • well, I put the spaces in around line 69 in tags_from_album.php and then there is a similar line below it it I adjusted that as well.

    Here is the adjustment.

    [code]
    $tags = query_full_array("SELECT DISTINCT t.name, t.id, (SELECT DISTINCT COUNT(*) FROM ". prefix('obj_to_tag'). " WHERE tagid = t.id AND type = 'images') as count FROM ". prefix('obj_to_tag'). " as o,". prefix('tags'). " as t".$tagWhere." ORDER by t.name");
    [/code]

    I still get the same error.
  • Just looked at your change and adjusted mine ... still doesnt work
  • Got it ... line 81 is missing a FROM...

    should be...

    [code]
    $tags = query_full_array("SELECT DISTINCT t.name, t.id, (SELECT DISTINCT COUNT(*) FROM ". prefix('obj_to_tag'). " WHERE tagid = t.id AND o.type = 'albums') AS count FROM ". prefix('obj_to_tag'). "AS o, " . prefix('tags'). " AS t " .$tagWhere. " ORDER by t.name");
    [/code]
  • acrylian Administrator, Developer
    Indeed! Good find! Fix is in the svn.

    (Btw, we don't use bbcode on the forum, just use `backticks`)
  • <?php printAllTagsFromAlbum("getAlbumTitle()",false,"albums",'|','',false,true,1,5,1,50); ?>

    ok, this is what im using on my image.php.... I'm looking for a way for it to return the current album and I thought that this would do it. However it returning all tags from all albums instead.

    Any ideas?
  • and what are backticks?
  • again.... got it ...

    <?php printAllTagsFromAlbum(getAlbumTitle(""),false,"albums",'|','',false,true,1,5,1,50); ?>

    Had the quotes wrong.
  • Back ticks are the backwards single quotes. On the US PC keyboard it is the key to the left of the "1" key below the tilda.
  • acrylian Administrator, Developer
    Typographica "backticks" are actually accents as used in French and other languages. Like à for example. On a Mac keyboard (European) they are left of the backspace key. Hit that key plus pressing SHIFT and then hit SPACE. Otherwise they don't appear. Normally they are used to add an accent to a normal character.

    `<?php printAllTagsFromAlbum(getAlbumTitle(""),false,"albums",'|','',false,true,1,5,1,50); ?>`

    The call is still wrong. The first parameter must be the album folder name not the title. The title can be "album1" while the actual name on the filesystem can be "album2".

    Also if the album is a subalbum of an album named "topalbum2" then the name of the subalbum is "topalbum2/album2".
  • Is there a way to make it pull the current folder name without specifying it?

    In my gallery there will be no subalbulms.

    It works now because the folder name is the title, but if I make another sasha album, which is highly likely it wont work.
  • acrylian Administrator, Developer
    `$_zp_current_album->name` stores the name of the current album you are in. This works in the next_album() loop as well and then of course on album.php and image.php.
  • Is that for the folder name or the title?
  • nm, got it thanks...

    What would be the proper way to call all tags from all albums? It's something I would like to put on the index.php and perhaps some other pages.
  • `$albumObject->getTags()` will return you an array of tags for the album. Presuming you do not want tags that are not associated with albums you would have to make a loop that recursively goes throught albums/subalbums and retireves the tags, then filter out the non-unique values.
  • `<?php printAllTagsFromAlbum("",false,"albums"," <B>· ","tags",false,true,1,5,1,50); ?>`

    Seems to be pulling album tags from multiple albums. Note the empty string.

    Any idea why thats working or whats going on?

    Sorry for so many questions.
  • hehe not sure the backtick worked for me.
  • I edited your post, it was missing the closing backtick. They are like quotation marks, two are needed.

    I took a look at the function. There are indications that an empty album name should mean something, but in fact all that seems to happen is that it does an SQL search for folders with no name (not a likely match.) You might try setting the second parameter to true, that will give something different, but maybe not any more useful.

    Acrylan will have to comment on this when Germany wakes up in the morning.
  • Also I can not get the CSS to work with it....

    `<?php printAllTagsFromAlbum("$_zp_current_album->name",false,"albums",' · ','tags',false,true,1,3,1,2); ?>`

    Where 'tags' is my CSS. The CSS is located in my header php file.

    `
    .tags a {
    color: #FF0CFF;
    text-decoration: none;
    }
    .tags a:hover {
    color: #000000;
    text-decoration: underline;
    }
    `
Sign In or Register to comment.