[nycphp-talk] Dynamically Add Links to Text
tedd at sperling.com
Thu Aug 27 17:11:28 EDT 2009
At 10:04 AM -0400 8/27/09, Randal Rust wrote:
>In one of our applications, we have a need to apply inline links to
>the text, and would like to figure out a way to do this dynamically. I
>have looked for this high and low, but haven't been able to find what
>I am looking for. Perhaps I am searching the wrong keywords.
>What we have is a repository of 1,000 articles. Each article has a
>unique title. If the title of that article appears in another article,
>we want to apply a link to the text, but only the first instance of
>My thought is that we have to:
>1. create an array of all titles
>2. create a variable that holds the article text
>3. loop through the title array and search the article text for a match
>4. the first instance that a match is found, append the link and
>update the string variable
>The trick is that when a new article is added, they system needs to
>automatically go back to all of the existing articles and run through
>this process, which I don't like, because this won't be 100% accurate
>in the editor's eyes. each updated article needs to be reviewed. I
>also think it would cause a performance hit and dramatically slow down
>the system, especially in one installation where we have nearly 4,000
>record that would need to be updated.
>and to simply append those links when the page loads. Unfortunately,
>these sites all have to comply with Section 508 and other
>accessibility guidelines, so that might not be an acceptable solution.
The way I would handle this would be like so:
Create a database that would contain a table that would hold your
articles. The table would have an index (ID), title of the article,
and the meat of the article. It could have other fields, but for sake
of demonstration let's use just those three.
Normally if one wanted to see an article all they would have to know
is the ID of the article and send that ID to a script that would
display the article -- something like display-article.php&id=215.
Note I am sending the id of the article and not the title of the
article to the display script.
With that said, all that would be needed would be a one-time search
through all the articles looking for all the titles you have in your
article table . This could be accomplished with a FULL TEXT search.
When a title is found, then simply add text to each title that would
make it a link. For example, if your script found "History of
America" with an ID of 215 and then the script would alter that
string like so:
<a href="display-article.php&id=215">History of America</a>
As such, your article linking problem would be solved.
Now if you add another article, then the process needs to be reset
and redone. In other words, find all links and remove them leaving
The only fly in the ointment is if your articles already have links
-- if so, then you could get around that problem by simply adding a
class attribute to your new links, like so:
<a href="display-article.php&id=215" class="dyn-link">History of America</a>
A such, when the script finds a link with a "dyn-link" class, then it
simply removes that link and returns the article from above to
"History of America". Note that class attributes don't alter anything
unless you specify them in your css/
Then rinse, repeat and the problem is solved. This would work and
only needs to be "rinsed and repeated" when new articles are added OR
when old articles are removed. Additionally, this could be done in a
instant by locking the table, doing the update, and unlocking the
table without any noticeable interruption.
http://sperling.com http://ancientstones.com http://earthstones.com
More information about the talk