[geeklog-modules] Adding AutoLink Capability to Geeklog

Blaine Lang geeklog at langfamily.ca
Thu Aug 26 00:15:09 EDT 2004


Regarding Adding an [AutoLink] capability to Geeklog

For the upcoming 1.3.10, I'd like to add this new capabilty

In reference to this post:
http://www.geeklog.net/forum/viewtopic.php?forum=8&showtopic=39494&lastpost=true

I had added this capability into a new plugin recently and saw the advantage of GL extending the API to allow other plugins and Core GL components to easily be referenced.

I have a PLG function as well that is ready to be added and can be added to GL components such as save_story and save_comments so that plugins can parse the content and replace any [tags] that are referencing them and replace the tag with a formatted HREF link.

The function that I have developed for my plugin can easily be used by other plugins as it was written to be generic. It parses out the [tag] to extract the two parms after the tagtype identifier.

[tagtype: parm1 parm2]   Example:  [file:1 myfile]  or [forum:2023 related forum topic]

For most apps 1 parm should be enough to uniquely identify the record and parm2 is the name to be used in the link.
Note: 
PARM1 is from the : to the first space
PARM2 can include spaces - I assume its from the end of parm1 to the closing ] tag.

My new CMS plugin now has this call that replaces a [autolink] tags with any other referenced plugin links 
     $content = PLG_replacetags($content);

Blaine

--------- New plugin function prototype ---------


function plugin_replacetags_myplugin($content) 
{
    global $_CONF;

    $filetag_prefix = '[file:';
    $offset = $prev_offset = 0;
    $str = " ".$content;
    $strlen = strlen($str);
    $tags = array();
    while ($offset < $strlen) {
        $start_pos = strpos( strtolower( $str ), $filetag_prefix, $offset );
        if( $start_pos !== FALSE ) {
           $end_pos = strpos( strtolower( $str ), ']', $start_pos );
           if($end_pos > $start_pos) {
                $taglength = $end_pos - $start_pos + 1;
                $tag = substr($str,$start_pos,$taglength);
                $parms = explode(' ',$tag);
                $label = str_replace(']','',$parms['1']);
                $parms = explode(':',$parms[0]);
                $fileid = $parms['1'];
                $newtag = array (
                    'tagstr' => $tag,
                    'startpos'  => $start_pos,
                    'length'    => $taglength,
                    'parm1'     => $fileid,
                    'parm2'     => $label
                );
                $tags[] = $newtag;

            } else {
                Return 'ERROR<p />Matching tag missing. Unable to format content.<p />';
            }
            $prev_offset = $offset;
            $offset = $end_pos;
        } else {
            $prev_offset = $end_pos;
            $end_pos = $strlen;
            $offset = $strlen;
        }
    }

    if (count($tags) > 0) {       // Found the [tag]
        foreach ($tags as $tag) {
            $filelink = '<a href="'.$_CONF['site_url'].'/myplugin/index.php?op=download&fid='.$tag['parm1'].'">'.$tag['parm2'].'</a>';
            $retval = str_replace($tag['tagstr'],$filelink,$content);
        }
    }
    return $retval;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist8.pair.net/pipermail/geeklog-modules/attachments/20040826/ac16955d/attachment.html>


More information about the geeklog-modules mailing list