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:
 
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="">'.$tag['parm2'].'</a>';
            $retval = str_replace($tag['tagstr'],$filelink,$content);
        }
    }
    return $retval;
}

Reply via email to