• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Add-on to add page to the account section

#1
Hi,

I am working on an add-on that will integrate SilverPop with XenForo.

That is my first add-on, so please bear with me.

By reading the how-to's, I was able to add links to the account sidebar, but am having a hard time finding information on how to add a view and route to it. I have experience with CakePHP, but XenForo is very different MVC.

I am linking users to - /index.php?account/email-preferences and need a way to display my page(view) when a user goes there.

Any help is welcome!

EDIT:
Here is my code:

/SilverpopIntegration/Listener/LoadClassController.php

PHP:
<?php
class SilverpopIntegration_Listener_LoadClassController {
    public static function extendControllerPublic_Account($class, array &$extend) {
        if ($class == 'XenForo_ControllerPublic_Account') {
            $extend[] = 'SilverpopIntegration_Index_ControllerPublic_Account';
        }
    }
}
/SilverpopIntegration/Index.php
PHP:
<?php

class SilverpopIntegration_Index_ControllerPublic_Account extends XFCP_SilverpopIntegration_Index_ControllerPublic_Account {
    public function actionEmailPreferences() {
   // code...
   }
}
2015-08-03 17_21_46-Code Event Listener Editor _ Admin CP - XenForo.png

Now when I reload the account page I see this message:
Fatal error: Class 'SilverpopIntegration_Index_ControllerPublic_Account' not found in W:\var\www\html\www.xenforo.localhost\library\XenForo\FrontController.php on line 442
 
Last edited:

Chris D

XenForo developer
Staff member
#2
There is a very strict naming convention - it's one class per file, and the file name and class name are made from each other.

With that in mind, this is named correctly:
Filename: /SilverpopIntegration/Listener/LoadClassController.php
Class: SilverpopIntegration_Listener_LoadClassController

This isn't:
Filename: /SilverpopIntegration/Index.php
Class: SilverpopIntegration_Index_ControllerPublic_Account

The correct file name should be (based on that class name):
/SilverpopIntegration/Index/ControllerPublic/Account.php
 
#3
Thank you @Chris D. That was very helpful. I will remember this one :)

I updated my code to:
/SilverpopIntegration/ControllerPublic/Account.php
PHP:
class SilverpopIntegration_ControllerPublic_Account extends XFCP_SilverpopIntegration_ControllerPublic_Account {
    public function actionEmailPreferences() {
   // do stuff
   }
}
and that fixed my issue.

Would you please shed some light on this part of my code:

PHP:
        return $this->_getWrapper(
            'account', 'emailPreferences',
            $this->responseView(
                'XenForo_ViewPublic_Account_Preferences_SilverpopIntegration_Index',
                'account_email_preferences'
            )
        );
Am I doing that correct? What is "XenForo_ViewPublic_Account_Preferences_SilverpopIntegration_Index" used for?
 
Last edited: