Here is a short reference of some points in source code, which should help you to create XenForo 2 add-on. At first, I recommend you follow the official tutorial with an add-on sample.
You can find it here:
https://xenforo.com/xf2-docs/dev/lets-build-an-add-on/
Below you will find additional information I discovered during writing my add-on.
Prepare environment
I usually use Docker for such kind of app. I worked on an app with Memcached, so you will see it in the files below.
Here is the content of Dockerfile
:
FROM php:7.2-apache
RUN apt-get update \
&& apt-get install -y \
zip \
zlib1g-dev \
libz-dev \
libmemcached-dev \
libpng-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libgd-dev
RUN a2enmod rewrite \
&& pecl install memcache xdebug-2.6.1 \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd mysqli zip \
&& docker-php-ext-enable memcache xdebug \
&& echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
And the content of docker-compose.yml
file:
version: '3'
services:
php:
build: ./docker/php #path to
container_name: php_container
environment:
XDEBUG_CONFIG: "remote_host=172.17.0.1 remote_port=9000"
PHP_IDE_CONFIG: serverName=localhost
volumes:
- ./app:/var/www/html
ports:
- 80:80
mariadb:
image: mariadb:10.4
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: database_name
volumes:
- db:/var/lib/mysql
ports:
- 3306:3306
memcache:
image: memcached:alpine
ports:
- 11211:11211
volumes:
db:
If you want to use HTTPS locally read the tutorial How to get HTTPS working on localhost to know more.
XenForo 2 console commands
Enter a Docker container with command:
docker exec -it -u www-data php_container bash
Then you can list all commands and filter them:
$ php cmd.php | grep addon
Add-on commands located in src/XF/Cli/Command/AddOn folder.
Add-on data
All add-ons stored in src/addons folder and xf_addon
table in the database.
Setup script
If you change tables with alters, use available data types from here: src/XF/Db/Schema/Column.php::type
.
Change tables with SchemaManager. See available methods in src/XF/Db/SchemaManager.php
, i.e. tableExists(), columnExists() etc.
Extend entity
The simplest way to extend an entity is to add it in the admin panel. See Development - Class extensions menu in the admin control panel.
It will write data to xf_class_extension
table. Classes extensions will be processed here: src/XF/Extension.php::extendClass
. XenForo extends with class_alias
PHP function. As a parent class, you should specify a class name with “XFCP_” prefix, see how it works here: forum/src/XF/Extension.php:243
(resolveExtendedClassToRoot
method).
Event listeners
XenForo 2 sends a lot of events through request processing. See the list of events and event listeners in Development - Code events and Code event listeners in the admin control panel. Data will be stored in database in tables xf_code_event
and xf_code_event_listener
.
In order to see all events, you could use Xdebug. Set a breakpoint in src/XF/Extension.php::fire
function and see event names and hints which you could use.
Use composer packages
Here is a good tutorial on how to use it:
https://xenforo.com/community/resources/using-composer-packages-in-xenforo-2-0-addons-tutorial.6588/
Template functions
See the list of default functions you can use in templates in file src/XF/Template/Templater.php:152
(variable $defaultFunctions
).