lastdance: (Default)
lastdance ([personal profile] lastdance) wrote in [community profile] style_system2009-05-05 09:26 pm

Calling functions in other classes

I've been reading S2 documentation like crazy, and I'm pretty sure the answer is 'no' but I'm going to throw out the question anyway:

Is there any possible way to call functions from a different view than the one you're currently on? For example, the EntryPage class has a function print_comments. But what if I want to print the subjects of the 5 latest comments on the Recent view (maybe in the sidebar)? The RecentPage class doesn't include that function, so I'm assuming there's no way to call it unless the core was rewritten to add it into RecentPage and allow it to take parameters so it knows which comments to pull back. Am I correct in that assumption?

I'll gladly take the question elsewhere if this isn't the right place. Any direction would be so much appreciated.
zorkfox: A computer screen from the Heart of Gold spaceship in The Hitchhiker's Guide to the Galaxy; it says, Normality Restored. (Six)

Flimsy Suggestion

[personal profile] zorkfox 2009-05-06 08:03 am (UTC)(link)
Perhaps you can access the comments using the Entries[] member of the RecentPage class, on the theory that each element of that array will have data about the comments on that entry. I tried to write some code for you, but my brain hasn't been in code-mode for a long time and I was stymied.

Look through the Entries[] array of your current instance of the RecentPage class and get the titles of the comments from the Comments[] array in those entries until you have five of them. Build in a flow control statement to stop after five (so you don't search every entry needlessly) and also one to handle an instance of no comments (this covers instances where there are no entries yet, or a page full of entries that don't have any comments).

When I glanced at the language reference for S2, I didn't see a simple way to do this because there isn't an until loop or even a while. You have to make up some kind of bastardized foreach. :( Maybe you can write an if statement that calls return when it finds it has collected five comments.

You might be able to use this function from Haven as a template. It's not the greatest example of code, but I hope it'll get your brain working in the right direction:

function RecentPage::lay_sidebar_view_summary() : string
{
    var string return;
    foreach var Entry e ($.entries) {
        var string subject = $e.subject != "" ? $e.subject : $*text_nosubject;
        $return = $return + "→";
        if ($e.security) { $return = $return + " $e.security_icon"; }
        $return = $e.poster.username != $.journal.username ?
                  $return + """ $e.poster:<br /><a href="#entry_$e.itemid">$subject</a><br />""" : 
                  $return + """ <a href="#entry_$e.itemid">$subject</a><br />""";
    }
}
zorkfox: An order ticket from a restaurant with one item written in blue ink: "Something better than this..." (Three)

Re: Flimsy Suggestion

[personal profile] zorkfox 2009-05-06 06:08 pm (UTC)(link)
Aw, heck. I'm sorry; you're totally right about that. It's because I started writing my reply with EntryPage in mind instead of ReplyPage, noticed half-way through, and made corrections. I can only blame the lateness of the hour. ^_^;
zorkfox: An order ticket from a restaurant with one item written in blue ink: "Something better than this..." (Three)

Re: Flimsy Suggestion

[personal profile] zorkfox 2009-05-06 06:46 pm (UTC)(link)
Sigh! I know why they limit the data in cases like this, but it sure is frustrating when you come up with a clever idea, but can't implement it because the computer time becomes a problem. :(