YetAnotherForum (YAF — pronounce “laugh”) is a forum package based on ASP.NET (C#) and Microsoft SQL Server. It has tons of features and functionality, and it use my , but when tasked with customizing it… well, that can be not quite so easy.
Creating a custom Theme/Skin for YAF
Skinning YetAnotherForum is kind of self evident. Just copy an existing theme folder and XML file from the themes folder. All there is to it is a theme.css file in the folder (and a bunch of images) and the settings in the XML file. Done.
Modifying the Layout of YAF
For as easy as changing the theme of YAF is, changing the actual layout is a time-consuming and involved process. And there are a few things which are not as evident from quick google searches or examining the code. So take a lesson from me and save yourself hours of time.
1. You cannot easily remove elements by commenting out the C#
Almost any main <YAF:Element> you try to comment out will trigger errors when you try to compile due to dependent blocks elsewhere. And the source of the errors may not always be apparent. You may be able to fix those errors, but chances are it will not be worth your effort. This is a pain because depending on what you want to do you may want to eliminate some elements from showing. This may be typical for ASP.NET, but coming from PHP it prevented a learning curve. Many things you may want to remove can be removed by changing BoardSettings. (See next tip)
2. YafContext.Current.BoardSettings are stored in the database
Once you start investigating the depths of the page and class files of YAF, you will eventually start noticing how many part of the board are in hide/show if blocks based on a value of YafContext.Current.BoardSettings.[something]. Other parts of the forum look to these settings for things.
I can’t tell you how many searches I made trying to find what file BoardSettings are stored in. I still don’t know if there is a file with defaults. I didn’t find it despite much searching.
These settings can be changed in the database under the Registry table. Easy peasy? I got thrown off because many of the settings are not in the table. If they are not in the table, you will have to insert a row. The “value” field is a string, so numbers and boolean values are stored just as their string equivalent. i.e. a true value can be stored as the string “true”.
3. The logical structure of the code is as follows
This may seem elementary, but I’m new to ASP.NET and working with modifying larger(ish) packages. It would have been helpful to me to have a diagram or even just a quick explanation of the layout of what calls what. YAF file structure diagram
As you can see, any single page may reference a dozen or two files. This can be a serious pain, as those .cs files in the YAF.Controls.dll are in my experience, very tedious to edit. I didn’t realize I neede the SRC version until I realized I could not access TopicLine.cs, which is necessary to change how the single line each topic is displayed as when you look at a single forum.
And to be clear: There are many more pages, controls, and elements within Controls.dll that aren’t shown here. Also, there may be some exceptions to the hierarchy shown here.
4. CSS Class names do not always describe what they refer to
With class names like .header1, .header1Title, and .rightItem, it is not always easy to tell what element these CSS classes are referring to. This can be particularly challenging when you want to edit what they are referred to and you can’t locate which source file the element it is referring to spawns in. This is more of a heads up than an actual tip.
Enjoy, and Contribute
That’s all the tips I have for you today about YetAnotherForum. In my one-day’s experience with them, I found it to be a little frustrating, however now that I am more familiar with it I feel more confident in the likelihood I would be able to switch things up more rapidly. I hope these tips help other newbies trying to do what I was doing.
If you have any tips/tricks of your own you’d like to contribute, please feel free to share and comment.