A few general questions regarding XF best practices

I've started work on this addon but would like to know about some best practices (Apologies for the newbie questions - I am still fresh to XF):

1. I've got my class/method set up and an event listener set up to fire that method on the controller_pre_dispatch event with a XenForo_ControllerPublic_Forum hint so that the method is only firing when absolutely necessary. Does this look correct for catching a new thread before it happens?

2. So I've got my method firing on every new thread request (<?php if($action === 'CreateThread')..... ?>) but I only need to continue if the node ID is 7. What is the best way to go about this? I see that I can dig down into the controller variables to get to the node ID, but I wasn't sure if there was a proper API request to get this.

3. OK, so now my method knows that a new thread is being posted to Node ID 7 and I need to see if the user has made any new threads in this node in the last 10 days. What is the proper way of querying the database for this information? The date calculation is easy, but I want to make sure we're going about all of this the right way in terms of API calls and whatnot.

4. How do we show an error to the user and stop execution of the page? In VB it was just a standard_error() call but I haven't yet discovered the right way of doing this in XF.

5. For future expansion on this, I see that I can create new option groups/options while in dev mode and assign these to my addon. Now, from my addon method, is there an options API that I would use to retrieve these settings?

6. I stumbled on http://xenforo.com/community/threads/getting-the-forum-number-from-the-uri.68377/#post-717417 as well, which seems like a good idea (Hide the new thread button so the user can't even see it if he's not eligible to post right now) but I'm not sure what the implementation would look like since I don't know how XF wants classes extended.

Overall, I absolutely love the flexibility here. This is leaps and bounds above VB development. I just need to get my bearings.

Thanks in advance for anything you can help with.

For what it's worth, I'm not completely helpless. I can figure out how to get things done, but I would rather learn the XF way. For example, I know I can do

PHP:
$db = XenForo_Application::get('db');
$addons = $db->fetchRow('SELECT * FROM xf_addon');

But I would like to know if there is a better way.
 
Last edited:
Top Bottom