Hello, dear readers of the blog site. So, we continue the topic of setting up the forum engine called SMF, which we started in the post about it. There we have not yet made the forum Russian, in terms of translation from the English interface. On this moment it does not look very presentable, but after Russification (if it has not already been done) and the creation of the appropriate sections, its appearance will improve significantly.

Today we will look at the design themes and make it Russian, and also install the JFusion component, which can work with both engines (Jumla and SMF), which will allow us to have a common user base for two and only one form for their registration and login.

Themes and installation of the Russian language pack

Simple engine Machines Forum supports the ability to change topics, and they can be changed both for the entire forum and for its individual sections in particular. Personally, I used the default theme, but made quite a lot of changes to it manually. In particular, I changed the background, the colors of some elements, added a clock on a flash drive, a radio and much more, which I will talk about in subsequent posts in this section.

Why didn't I use any of the additional themes when creating the forum? Well, it's probably all about my laziness. No, I was not lazy to search and download new themes, fortunately there are many places where this can be done. My laziness lies elsewhere.

The fact is that the whole variety of mods for this engine, designed to expand its capabilities, is focused specifically on the default theme. Let me explain. If you have a default theme, then adding a mod to SMF takes place in a matter of seconds and, as a rule, does not require manual editing of the code.

If you install a mod with a design theme different from the default one, you will need, as they say, to process all the raw parts with a file. In other words, you will have to use FileZilla (download and configure it; you can access the site via FTP and open for editing the files of your forum engine, which this mod makes changes to.

Then look for the right place in the code and produce necessary actions: either replacing the code, or deleting, or adding a section of code before or after the required fragment. If you consider that there may be about a dozen files to which changes will need to be made, then you can imagine how troublesome it will be to do this. In this case, you need to be very careful and not make mistakes, because otherwise the forum may not open at all.

If all the above problems of using a non-default theme do not scare you, then you can download them from here. The themes there are sorted into sections (minimalism, close to classical, modern, etc.) and for each of them you can see a screenshot of it in full screen. I’ll tell you how to install these same themes a little later.

If you did not Russify the forum at the stage of uploading the engine files to the hosting, as was described in the first part of this opus (see the link at the very beginning of the article), then you can do it now. The Russian language pack with the required one, previously downloaded from this page, needs to be unpacked, and then copied the Themes folder to the root folder, where there is already a directory with the same name.

After copying is complete, you need to log into the forum using the administrator username and password. Select “Admin” in the top menu, and then click “Server Settings” in the left column.

In the window that opens, find the “Default Forum Language” item and select the Russian language from the drop-down list, and then click on the “Save” button at the bottom of the page.

That's it, now your conference is completely in Russian.

Solving problems when installing mods that do not support the Russian language

Please note that in the future, when adding mods to SMF that do not have a Russian translation, you may sometimes have a problem with displaying the mod settings in the admin panel. Actually, these same settings will simply not be visible in the admin panel, because... there will be no Russification files for them. Therefore, you will have two options to solve this problem.

The first way is to switch to English for the entire forum. You can see how this can be done a few paragraphs above. Accordingly, after you perform the necessary actions with these settings, you will need to return to Russian again.

The second method is more complicated, but it will allow us to see the settings of installed mods in the admin panel always, and not just when activated in English. I dwell on this point in such detail because the question that someone installed a mod and cannot find its settings in the admin panel of their conference is a very common one.

So, the second method is to add translation strings to the Russification files for the newly added mods. I’ll tell you later how to determine which Russification files need to be changed and where to get them. In the meantime, temporarily, you can use the first method.

Installing JFusion for website and forum integration

First you will need to download JFusion and its Russification. Having entered the Joomla admin panel, we perform standard actions: select from top menu admin panel items “Extensions” - “Install/Uninstall” - “Download package file” - “Browse” button - find the file with the jfusion_package.zip component on your computer - click on the “Download file & Install” button.

After this, a window appears informing you that the component was installed successfully. If problems arise, then you can familiarize yourself with solutions to some of them at the link given just above.

Now it’s time for Russification, which is added in exactly the same way as the component itself. Those. repeat the sequence of actions: “Extensions” - “Install/Uninstall” - “Download package file” - “Browse” button - find the JFusion Russification file on your computer - click on the “Download file & Install” button. Now we can go to the settings along the path “Components” - “JFusion” and make sure that Russification has been successfully added and is working.

Good luck to you! See you soon on the pages of the blog site

You might be interested

Setting up JFusion for merging SMF forum and Joomla site
JFusion modules for displaying messages from the forum on the website, as well as creating a button in SMF to return to Joomla
Creating a menu item in Joomla to enter the forum and transferring user registration from SMF to the site
Installation of the SMF forum - Integration of Joomla 1.5 and Simple Machines Forum using JFusion component
Extensions for Joomla - what they are and where to download components, modules and plugins for Joomla, how to install and remove them
K2 component for creating blogs, catalogs and portals on Joomla - features, installation and Russification Photo Gallery for Joomla - Part 3 - Creating galleries in Joomla 1.5 using the Phoca Gallery component - adding categories and uploading images to the photo gallery
ARTIO JoomSEF - setting up CNC (SEF) links and Title in Joomla, as well as creating a 404 error page using this extension
Akeeba Backup (formerly JoomlaPack) - creating a backup of a site on Joomla and restoring it from backup copy in two clicks

Organized by Botmaster Labs, not planned. I don’t have time, the video is needed for a competition, as a newfangled trend, although everything can be explained more easily with good screenshots (my IMHO), and I don’t really want to shoot anything. There are very few profitable topics left, stupid spam doesn’t rule at all anymore, you need to think here and no one will shoot topics, unless you try to put the outdated ones in a beautiful wrapper and powder them a little. :) But this is not about us. In general, these 3 “don’ts”, I think, basically became barriers to participation in the competition for the majority of potential participants. It’s like repairing a car out of three: cheap, high quality, fast - the service can only fulfill 2 conditions at the same time. sit and choose what is closer to you. :) It’s the same with the competition: I have time, I know how to make a video, but there is no topic, or I know how to make a video, there is a topic, but I don’t have the time at all, or I have free time and there is a small topic, but the video is scary. But this is good if 2 conditions are met at the same time. Well, okay, let's discard the lyrics. I'll continue to myself. I didn’t plan, which means I took part in the competition, I even chose which article I would vote for. Whatever you say, Doz knows the software very well and knows how to use it very intelligently. But today I learned that intrigue has appeared in the competition. It turns out that I won’t be able to vote, and only newcomers who purchased the software in 2011 will be able to do this, and the competition is designed for them. I was a little surprised, but the owner is a gentleman. The competition is an advertising campaign and Alexander knows better how to carry it out. In general, I then decided to post an article; it is somewhat easier to write when it is clear for whom, for the entire collective farm, in fact, it is impossible to do this.
The long introduction is over, now to the point.
What does a beginner need when he has purchased such a super-combine, which is the Xrumer + Hrefer complex? That's right, learn how to work on it and discard the illusion that you can earn money by starting to spam sheets. If you think so, better donate your money to charity right away. You need to learn how to use the tools of the complex, preferably sharpening it for yourself. The time of “take more - throw further” is gone. Quantity gives way to quality. This means we will assemble a base for ourselves; if you don’t learn how to do this, you will fall behind the train. Naturally, Khrefer will help us with this. If you plan to promote your resources on Google, then we also need to search for donor sites through Google. I think this is understandable and logical. But Google, like the mistress of the copper mountain, does not give away its wealth to everyone. You need an approach to it. I would like to say right away that do not hope that based on the signs that you find in the public you will be able to collect something. The reason they are available in public is because they are worthless. I will not develop the topic further. It’s better to tell you how to assemble it correctly so that you can see the result, you can work out the rest yourself, the main thing is to understand the principle. We need to collect the right ones based on the characteristics of the specific engines we need, and not on the characteristics of forums in general. This main mistake for beginners - do not concentrate on a specific one, but try to cover everything in its entirety. And also, if you want to parse a more or less normal database, stop using operators in queries. No "inurl:", "site:", "title", etc. Google will ban searchers like you instantly. Therefore, we carefully study the engines with which currently Khrumer works:

Powered by php-Fusion

In version Khroomer 7.07, the program is trained on several new engines:

forumi.biz, forumb.biz, 1forum.biz, 7forum.biz, etc.

phpBB-fr.com, Solaris phpBB theme

And the process of learning new things is continuous.
In general, we need to prepare the correct queries for parsing by Hrefer. Let's take the forum dizhok as an example. SMF Forums. And let's start disassembling it into spare parts for parsing. Our beloved Google will help us with this. Enter a query into Google SMF Forums- there is a lot of garbage in the search results, we rewind to some 13th page and select any link. I came across this one: http://www.volcanohost.com/forum/index.php?topic=11.0. Let's open it and study it. We need to find something characteristic on the page that can be applied to the search for other pages on this engine. In the footer we notice the following inscription Powered by SMF 1.1.14, quote it and enter it into Google, it shows us that according to this request he knows about 59 million options. We quickly look through the links, add a couple more options to this keyword, for example, "Powered by SMF 1.1.14" poplar or "Powered by SMF 1.1.14" viagra. We make sure that the request is great, the results are only forums and almost no garbage.

In addition, we are not interested in quantity, but in quality, as I said above. Go ahead. From the same forum we take another phrase from the footer: , we also quote it and feed it to Google. In response, he reveals that he knows more than 13 million results. Again, we quickly look through the results, add additional words and check the results with them. We make sure that the request is excellent and there is also almost no garbage. In general, there are already 2 iron requests. I suggest leaving the first forum alone for now and continuing to collect requests from other forums. Fortunately, we have Google open upon request. 2006-2008, Simple Machines LLC. We take from the search results, for example, these forums: http://www.snowlinks.ru/forum/index.php?topic=1062.0 and http://litputnik.ru/forum/index.php?action=printpage;topic=380.0 in the footers we take the following queries from them: “Powered by SMF 1.1.7” and “Powered by SMF 1.1.10” (I always recommend entering queries for Hrefer in quotation marks, because we need quality first of all). I think it’s clear what we are doing, in the end we will have a certain database of queries for searching forums on the SMF engine (it was chosen as an example, the same with other engines).
It will look something like this:

"Powered by SMF 1.1.2"

"Powered by SMF 1.1.3"

"Powered by SMF 1.1 RC2"

"Powered by SMF 1.1.4"

"Powered by SMF 1.1.8"

"Powered by SMF 1.1.7"

"2006-2008, Simple Machines LLC"

And that's not all. While collecting engine versions, on some SMF forums we find the caption “2001-2006, Lewis Media” in the footer. We are checking this request, it also fully satisfies us. We find a similar request: "2001-2005, Lewis Media". Looking through the footers further we find the following request: “SMFone design by A.M.A, ported to SMF 1.1”. We check - great. And so on. Half an hour of work and you have a wonderful database of queries for the engine, and Google will ban you for these queries much less often than if you use operators in them. And at the same time, your database will be much cleaner than if you use queries like “index.php?topic=", because here Google will give not only the forums we need, but also many left-wing resources where it was possible leave a link to the forum topic. You might object, what's wrong with that? Others left a link, so we can too. But! Links can be left not only by Khrumer, but also by other programs. Moreover, they can be specially tailored for leaving comments on a certain resource, the so-called highly specialized software, plus such links could be left by hand. Again, I repeat, it is not the quantity of garbage that is important to us, but the quality; we will collect the database with the right requests. Plus this method also in the fact that you will practically not need to configure in Hrefer sieve -filter , you can simply turn it off, because Google will practically not give you garbage.


I think that learning how to use Hrumer correctly at the initial stage is very important, because once you learn this, you can always find a use for Hrumer, no matter how the situation changes. Protections are becoming more complicated, and if on some types of engines the protection has been strengthened and Khrumer cannot cope with it at the moment, then there is no point in spending resources on collecting these links, and then working on them with Khroomer, it is better to concentrate forces on what gives results . And at the same time, if the Botmaster Labs team taught Khroomer something new, you can quickly dissect a new patient and prepare the base for Khroomer while the patient is still warm. Time is money; the resource may no longer be relevant when you buy the base. collected by someone. In addition, correct collection of bases for yourself significantly expands the “white” use of Khrumer. And this is exactly where everything is moving, whether we like it or not, and the process of whitening or graying is ongoing. Black sheets are becoming a thing of the past in every possible way.
All other technical aspects of working with Hrefer can be viewed in the help and there is no point in dwelling on them; all goals, points, seconds are set experimentally for each car individually.
As a bonus, I’ll post here a template for parsing the Chinese search engine Baidu, the other day they asked me about it, so I did it casually, excuse the pun. :)


Hostname=http://www.baidu.com
Query=s?wd=
LinksMask=
TotalPages=100
NextPage=

NextPage2=

CaptchaURL=
CaptchaImage=
CaptchaField=


I tried to test parse them, there was no ban, Khrefer collected resources quickly, all the queries for parsing were similar to Google’s, but there were a lot of Chinese resources, with a high PR, and besides, there were many places where no European had ever set foot. It is better to parse Chinese queries. Google translate will help with this, type in a list of keywords in Russian and translate it into Chinese. The truth in " Words"Hrefer words cannot be added in Chinese, they need to be recoded.
Instead of Chinese:

伟哥 - Viagra

吉他 - guitar

其他 - rest

保险公司 - insurance

Put these replacing codes in the Words file:

%E4%BC%9F%E5%93%A5

%E5%90%89%E4%BB%96

%E5%85%B6%E4%BB%96

%E4%BF%9D%E9%99%A9%E5%85%AC%E5%8F%B8

If you are promoting an insurance website, then by placing a link in your profile on a thematic (!) even Chinese forum found by request " SMF forum" 保险公司 it will be very good.
In conclusion, I would like to say that I never understood people who complained that Khrefers were cooked poorly or badly; in response to this, I always wanted to say, you just don’t know how to cook them. No parser can collect results better than a reffer; the requests just have to be correct. Hrefer is a car: good, solid, made in German, but it is driven by a person and it all depends on how well it is driven; you cannot force the car to drive both right and left at the same time.
A separate topic is cleaning databases, I once did this 3 years ago for a previous competition. For the most part, everything is still relevant there, but now you can refuse to check for 200 OK, I really didn’t really like this process, there were very large errors, a lot of unnecessary stuff was filtered out. Now this can be done almost automatically during the operation of Khrumer, although this process is not a complete analogue of checking for “200 OK”. Anyway, to the point: not long ago a wonderful opportunity appeared in Khrumer - to rob information from resources at the time of running a project. It looks like this. You enter a template that will be processed during operation, and the information collected from the template will be entered into the xgrabbed.txt file in the Logs folder. You can use this function for anything, the flight of imagination is huge. I use this function once a week to remove links from my working "expired" database. It’s no secret that forums are dying out every day in order to clear our database of such resources, and the “Autograbbing” tool will help us in this case.
After all, you must admit that when we often type, for example, http://www.laptopace.com/index.php, we see that this domain is already, for example, a good guy selling money, but there is no forum there. So, in order to throw this slag out of the base, we will rob. :) Open the source code of the page and see this entry there:

laptopace.com
For grabbing, we transform it into
[...]

Now all the “dead men” from goudaddi will be known to us by name.
Here is a small selection for the Autograbbing tool, if you want to clear the database of different “expired” domains:


[...]

[...]
[...]
[...]

[...]
This domain may be for sale. [...]Buy this Domain


[...]<body bgcolor="#ffffff" text="#000000"> </span><br>The list is far from complete, but I think it will help you avoid running multi-million dollar garbage databases multiple times. Creating a template is not difficult, just open the expired link and make a template mask. <br>Using the same autograbbing, you can comb through your existing databases and sort them by resources, breaking them down by engines. Sorting databases by engines will allow you to make optimal use of all the capabilities and settings of Khrumer, in particular the learning process. And besides, with the help of Autograbbing you can remove garbage from databases if you prefer to collect them not with Hrefer, but by downloading them from various file hosting services. To do this, you either need to make a mask for selecting forums and then collect from the database only what is grabbed by the mask, or, on the contrary, make a mask for non-forums and then delete what is grabbed. The first option is more logical and reliable, because we know exactly what to look for. <br>Good luck in job. <br>PySy. I made a narrowly focused video (I had a lot of trouble with it, it was the first time I did it :)), although I launched Hrefer from my home machine, the speed of the net is not very good, I have copies here only for tests, so don’t blame me for the speed of work. :) <br><p><span class="BlWV-EuxoOk"></span></p> <h4>16 comments:</h4> <p>jeka comments...</p><p>What program did you use to select the keywords?</p> Serge Glazko comments... <p>If I need to collect thematic resources, then I select words in Words manually and through AdWords. but for many topics, words have already been selected for me, here I can only add or remove some words, but also not automatically, but look through them all.</p> <p>Let's start right away with the main script code:</p> <p>#!/usr/bin/perl</p><p># which-forum.pl script <br><span># (c) 2010 Alexandr A Alexeev, http://site/</p><p>use strict;</p><p># commented lines - for rigor</span><br><span># if the task is to collect engine statistics, leave it as is</span><br><span># if you make a list of forums - uncomment</p><p>my $data ; <br>$data .= $_while (<> ) ; </p><p># check how much was Powered by phpBB without a link in the footer</span><br>print "phpbb <span>\n"</span><br>if ($data =~ <span>/<a[^>]+href="[^"]*http:\/\/(?:www\.)?phpbb\.com\/?"[^>]*>phpBB/i</span> or <br><span># $data =~ /viewforum\.php\?[^""]*f=\d+/i or</span><br>$data =~ /phpBB\-SEO/i or <br>$data =~ <span>/<link rel="copyright" href="(?:http:\/\/)?phpBB\.com"/i </span>) ; <br>print "ipb <span>\n"</span><br>if ($data =~ <span>/<a[^>]+href="[^"]*http:\/\/(?:www\.)?invision(?:board|power)\.com\/?[^"]*"[^>]*> [^<]*IP\.Board/i </span> or <br>$data =~ <span>/<a[^>]+href="[^"]*http:\/\/(?:www\.)?invisionboard\.com\/?"[^>]*>Invision Power Board/i</span> or <br>$data =~ <span>/<div id=[""]{0,1}ipbwrapper[""]{0,1}>/i</span> or <br>$data =~ <span>/index\.php\?[^""]*showforum=\d+/i</span>) ; <br>print "vbulletin <span>\n"</span><br>if ($data =~ <span>/Powered by:?[^<]+vBulletin[^<]+(?:Version)?/i </span> or <br>$data =~ <span>/<meta name="generator" content="vBulletin/i </span> or <br>$data =~ <span>/forumdisplay\.php\?[^""]*f=\d+/i</span>) ; <br>print "smf <span>\n"</span><br>if ($data =~ <span>/<a[^>]+href="[^"]*http:\/\/(?:www\.)?simplemachines\.org\/?"[^>]*>Powered by SMF/i</span> or <br>$data =~ <span>/index\.php\?[^""]*board=\d+\.0/i</span>) ; <br>print "punbb <span>\n"</span><br>if ($data =~ <span>/<a[^>]+href="[^"]*http:\/\/(?:(?:www\.)?punbb\.org|punbb\.informer\.com)\/?"[^>]*> PunBB/i</span>) ; #or <br><span># $data =~ /viewforum\.php\?[^""]*id=\d+/i);</span><br>print "fluxbb <span>\n"</span><br><span># if($data =~ /viewtopic\.php\?id=\d+/i or</span><br>if ( $data =~ <span>/<a[^>]+href="http:\/\/(?:www\.)fluxbb\.org\/?"[^>]*>FluxBB/i</span>) ; <br>print "exbb <span>\n"</span><br>if ($data =~ <span>/<a[^>]+href="[^"]*http:\/\/(?:www\.)?exbb\.org\/?"[^>]*>ExBB/i</span>) ; # or <br><span># $data =~ /forums\.php\?[^""]*forum=\d+/i);</span><br>print "yabb <span>\n"</span><br>if ($data =~ <span>/<a[^>]+href="[^"]*http:\/\/(?:www\.)?yabbforum\.com\/?"[^>]*>YaBB/i</span> or <br>$data =~ /YaBB\.pl\?[^""]*num=\d+/i ) ; <br>print "dleforum <span>\n"</span><br>if ($data =~ <span>/\(Powered By DLE Forum\)<\/title>/i</span> or <br>$data =~ <span>/<a[^>]+href="[^"]+(?:http:\/\/(?:www\.)?dle\-files\.ru|act=copyright)[^"]*">DLE Forum<\/a>/i</span>) ; <br>print "ikonboard <span>\n"</span><br>if ($data =~ <span>/<a[^>]+href="[^"]*http:\/\/(?:www\.)?ikonboard\.com\/?[^"]*"[^>]*>Ikonboard/i</span> or <br>$data =~ <span>/<meta name="GENERATOR" content="Ikonboard/i </span> or <br>$data =~ /ikonboard\.cgi/i ) ; <br>print "bbpress <span>\n"</span><br>if ($data =~ <span>/<meta name="generator" content="bbPress/i </span>) ; # or <br><span># $data =~ /topic\.php\?id=\d+/i or</span><br><span># $data =~ /forum\.php\?id=\d+/i);</span><br>print "flashbb <span>\n"</span><br><span># if($data =~ /forums\.php\?fid=\d+/i or</span><br><span># $data =~ /topic\.php\?fid=\d+/i or</span><br>if ($data =~ <span>/<a[^>]+href="http:\/\/(?:www\.)?flashbb\.net\/?"[^>]*>FlashBB/i</span>) ; <br>print "stokesit <span>\n"</span><br><span># if($data =~ /forum\.php\?f=\d+/i or</span><br>if ($data =~ <span>/<a[^>]+href="http:\/\/(?:www\.)?stokesit\.com\.au\/?"[^>]*>[^\/]*Stokes IT/i</span>) ; <br>print "podium <span>\n"</span><br><span># if($data =~ /topic\.php\?t=\d+/i or</span><br>if ($data =~ <span>/<a[^>]+href=[""]?http:\/\/(?:www\.)?sopebox\.com\/?[""]?[^>]*>Podium/i</span>) ; <br>print "usebb <span>\n"</span><br><span># if($data =~ /forum\.php\?id=\d+/i or</span><br>if ($data =~ <span>/<a[^>]+href="http:\/\/(?:www\.)?usebb\.net\/?"[^>]*>UseBB/i</span>) ; <br>print "wrforum <span>\n"</span><br><span># if($data =~ /index\.php\?fid=\d+/i or</span><br>if ($data =~ <span>/<a[^>]+href="http:\/\/(?:www\.)?wr\-script\.ru\/?"[^>]*>WR\-Forum/i</span>) ; <br>print "yetanotherforumnet <span>\n"</span><br>if ($data =~ /Yet Another Forum\.net/i or <br>$data =~ <span>/default\.aspx\?g=posts&t=\d+/i</span>) ; </p> <p>You will find this and other scripts mentioned in the post in <a href="https://gamevid.ru/en/files/2010/09/which-forum.tgz">this archive</a>.</p> <p>Script <i>which-forum.pl</i> examines the HTML page code to see if it contains signatures of the forum engine. We used a similar technique when <a href="https://gamevid.ru/en/which-cms-perl/">Definition of WordPress and Joomla</a>, but there are a couple of differences. Firstly, the script itself does not load the page code, but reads it from stdin or a file passed as an argument. This allows you to download the page once, for example, using wget, and then run it through several analyzers, if we have more than one. Secondly, in this script the presence of a signature is 100% a sign of the engine. Last time, the presence of a signature only added weight to the corresponding engine and the engine with the greatest weight “won”. I decided that in this case, such an approach would only unnecessarily complicate the code.</p> <p>To test the script, I did some research. I compiled a list of several thousand forums and ran each of them through my script, thereby determining the percentage of program responses and the popularity of various engines.</p> <p>To get a list of forums I used <a href="https://gamevid.ru/en/google-hack/">with your Google parser</a>. <a href="https://gamevid.ru/en/news/chto-soderzhit-lyubaya-poiskovaya-sistema-poiskovye-sistemy-sostav-funkcii/">Search engine</a> requests like</p> <p>site:forum.*.ru <br>site:talk.*.ru <br>site:board.*.ru <br>site:smf.*.ru <br>site:phpbb.*.ru <br> ....</p> <p>and so on. <a href="https://gamevid.ru/en/repair/kryak-dlya-driver-updater-pro-licenzionnyi-klyuch-auslogics-driver-updater-i-kody-aktivacii-skachat/">Full code</a> you will find the query generator in the file <i>gen-forumsearch-urls.pl</i>. In addition to zone.ru, .su .ua .kz and .by were also used. Last time, it was difficult to conduct such a study, since WordPress and Joomla sites do not have such signatures in the URL. Catalogs like cmsmagazine.ru/catalogue/ do not provide a sufficient sample size. What is 600 Drupal sites?</p> <p>I must admit, the results of the experiment disappointed me. Of the 12,590 sites studied, the engine was successfully identified on only 7,083, that is, only in 56% of cases. Maybe I didn't take into account some engine? Was it really true that half of the forums had Bitrix installed? Or should I have spent more time searching for signatures? In general, additional research is required here.</p> <p>Among the 56% of successfully identified engines, the most popular, as expected, were IPB (31%), phpBB (26.6%) and vBulletin (26.5%)</p> <p>They are followed with a large lag by SMF (5.8%) and DLEForum (5.3%). My <a href="https://gamevid.ru/en/startup-necrologue/">favorite punBB</a> ended up only in 6th place (1.64%). I wouldn’t recommend putting much faith in these numbers (they say that every third forum on the RuNet runs on IPB), but certain conclusions can, of course, be drawn.</p> <p>For example, if you intend to make a site on a forum engine and plan to modify the forum, say, pay users $0.01 for each message with automatic withdrawal of funds once a week, then you should choose one of the three most popular engines. The more popular the forum, the greater the chances of finding a programmer who is well versed in it.</p> <p>If no significant changes are expected in the engine, then it may make sense to choose a less popular engine, for example SMF or punBB. This will reduce the number <a href="https://gamevid.ru/en/ipod/rosneft-soobshchila-o-moshchnoi-hakerskoi-atake-na-svoi-servery/">hacker attacks</a> to your forum and the amount of spam automatically sent on it.</p> <p>Scripts for searching/identifying forums can also be found in more than one <a href="https://gamevid.ru/en/news/lidar-s-povorotnym-zerkalom-lazernye-dalnomery-lokacionnye/">practical use</a>. The first thing that came to my mind was this <a href="https://gamevid.ru/en/perl-cy-check/">sort by TCI</a> identified forums and place posts on the first hundred with links to one of your sites. However, hundreds of forum dofollow links did not affect the TCI in any way (2 updates have passed), so it is better not to waste time here, unless you are not interested in transitions.</p> <p>It is clear that the mentioned use of scripts is far from the only one. I think you can easily figure out how else you can use them.</p> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> </article> <div class="post-meta"> <div class="post-rating"> <div class="post-rating__title">Article rating:</div> <div id="post-ratings-557" class="post-ratings" data-nonce="79f57c6f5f"><img id="rating_557_1" src="https://gamevid.ru/wp-content/plugins/wp-postratings/images/stars/rating_off.gif" alt="1 Star" title="1 Star" onmouseover="current_rating(557, 1, '1 Звезда');" onmouseout="ratings_off(0, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy loading=lazy><img id="rating_557_2" src="https://gamevid.ru/wp-content/plugins/wp-postratings/images/stars/rating_off.gif" alt="2 Stars" title="2 Stars" onmouseover="current_rating(557, 2, '2 Звезды');" onmouseout="ratings_off(0, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy loading=lazy><img id="rating_557_3" src="https://gamevid.ru/wp-content/plugins/wp-postratings/images/stars/rating_off.gif" alt="3 Stars" title="3 Stars" onmouseover="current_rating(557, 3, '3 Звезды');" onmouseout="ratings_off(0, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy loading=lazy><img id="rating_557_4" src="https://gamevid.ru/wp-content/plugins/wp-postratings/images/stars/rating_off.gif" alt="4 Stars" title="4 Stars" onmouseover="current_rating(557, 4, '4 Звезды');" onmouseout="ratings_off(0, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy loading=lazy><img id="rating_557_5" src="https://gamevid.ru/wp-content/plugins/wp-postratings/images/stars/rating_off.gif" alt="5 stars" title="5 stars" onmouseover="current_rating(557, 5, '5 Звезд');" onmouseout="ratings_off(0, 0, 0);" onclick="rate_post();" onkeypress="rate_post();" style="cursor: pointer; border: 0px;" / loading=lazy loading=lazy>(No ratings yet) <br /><span class="post-ratings-text" id="ratings_557_text"></span></div> <div id="post-ratings-557-loading" class="post-ratings-loading"> <img src="https://gamevid.ru/wp-content/plugins/wp-postratings/images/loading.gif" width="16" height="16" class="post-ratings-image" / loading=lazy loading=lazy>Loading...</div> </div> <div class="post-share"> <div class="post-share__title">Share with friends:</div> <script type="text/javascript" src="//yastatic.net/share2/share.js" charset="utf-8" async="async"></script> <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,gplus,twitter" data-counter=""></div> </div> </div> </div> <div class="yarpp-related"> <div class="yarpp-related__title">Articles on a similar topic</div> <ul class="related"> <style> </style> <ul class="related-items"> <li><img src="/uploads/b2e8f4f45c510e6c3f58617c2679bd7b.jpg" width="150" height="95" / loading=lazy loading=lazy><a href="https://gamevid.ru/en/news/chto-delat-esli-ne-obnovlyaetsya-po-chto-delat-esli-android-ustroistvo-ne-obnovlyaetsya-pochemu-vash-te/">What to do if your Android device is not updated?</a></li> <li><img src="/uploads/f05b394bc6e08bca75e5d3e5cbd86258.jpg" width="150" height="95" / loading=lazy loading=lazy><a href="https://gamevid.ru/en/reviews/kak-ustanavlivat-mody-karty-tekstury-i-skiny-kak-ustanovit-mody-na/">How to install mods on minecraft How to install mods on a computer</a></li> <li><img src="/uploads/b810bb0707164b7574b4574bf21ff99b.jpg" width="150" height="95" / loading=lazy loading=lazy><a href="https://gamevid.ru/en/reviews/kak-vzyat-obeshchannyi-platezh-na-tele2-i-kakie-usloviya-etoi-opcii/">Promised payment Tele2 How to connect a trust payment on Tele2</a></li> <li><img src="/uploads/51f463eb063747b663434d3e9d262c13.jpg" width="150" height="95" / loading=lazy loading=lazy><a href="https://gamevid.ru/en/repair/kak-zaiti-v-iks-boks-registraciya-i-podklyuchenie-k-xbox-live-oformlenie-uch-tnoi/">Register and connect to Xbox Live</a></li> </ul> </ul> </div> <aside class="comments-block"> <div id="disqus_thread"> </div> </aside> </main> </div> </div> <footer class="footer"> <div class="footer-copy">© 2024 All rights reserved</div> <nav class="footer-nav"> <ul class="footer-nav__items"> <li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://gamevid.ru/en/sitemap.xml">Site Map</a></li> </ul> </nav> </footer> <div class="modal-hidden"> <div class="search-modal"> <div class="modal_close arcticmodal-close">Close</div> <div class="search-title">Find on the site</div> <div class="search-form"> <form method="get" action="/"> <input type="text" value="" name="s" placeholder="Site search" class="search-form__field"> <input type="submit" value="" class="search-form__button search-open"> </form> </div> <div class="search-example">For example: <span>types of drywall</span></div> </div> </div> <script type="text/javascript"> function dem_ready(e) { "use strict"; var t, n = ".democracy", i = e(n), o = ".dem-screen", a = ".dem-add-answer-txt", s = e(".dem-loader").first(), d = {}; i.length && (d.opts = i.first().data("opts"), d.ajaxurl = d.opts.ajax_url, d.answMaxHeight = d.opts.answs_max_height, d.speed = parseInt(d.opts.anim_speed), d.lineAnimSpeed = parseInt(d.opts.line_anim_speed), setTimeout(function() { var t = i.find(o).filter(":visible"), n = function() { t.each(function() { d.setHeight(e(this), 1) }) }; t.demInitActions(1), e(window).on("resize.demsetheight", n), e(window).load(n), d.maxAnswLimit(); var a = e(".dem-cache-screens"); a.length > 0 && a.demCacheInit() }, 10), e.fn.demInitActions = function(t) { return this.each(function() { var n = e(this), i = "data-dem-act"; n.find("[" + i + "]").each(function() { e(this).attr("href", ""), e(this).click(function(t) { t.preventDefault(), e(this).blur().demDoAction(e(this).attr(i)) }) }); var o = !!n.find("input[type=radio][data-dem-act=vote]").first().length; o && n.find(".dem-vote-button").hide(), d.setAnswsMaxHeight(n), d.lineAnimSpeed && n.find(".dem-fill").each(function() { var t = e(this); setTimeout(function() { t.animate({ width: t.data("width") }, d.lineAnimSpeed) }, d.speed, "linear") }), d.setHeight(n, t), n.find("form").submit(function(t) { t.preventDefault(); var n = e(this).find('input[name="dem_act"]').val(); n && e(this).demDoAction(e(this).find('input[name="dem_act"]').val()) }) }) }, e.fn.demSetLoader = function() { var e = this; return s.length ? e.closest(o).append(s.clone().css("display", "table")) : t = setTimeout(function() { d.demLoadingDots(e) }, 50), this }, e.fn.demUnsetLoader = function() { return s.length ? this.closest(o).find(".dem-loader").remove() : clearTimeout(t), this }, e.fn.demAddAnswer = function() { var t = this.first(), n = t.closest(o), i = n.find("[type=checkbox]").length > 0, s = e('<input type="text" class="' + a.replace(/\./, "") + '" value="">'); if (n.find(".dem-vote-button").show(), n.find("[type=radio]").each(function() { e(this).click(function() { t.fadeIn(300), e(a).remove() }), "radio" == e(this)[0].type && (this.checked = !1) }), t.hide().parent("li").append(s), s.hide().fadeIn(300).focus(), i) { var d = n.find(a); e('<span class="dem-add-answer-close">×</span>').insertBefore(d).css("line-height", d.outerHeight() + "px").click(function() { var t = e(this).parent("li"); t.find("input").remove(), t.find("a").fadeIn(300), e(this).remove() }) } return !1 }, e.fn.demCollectAnsw = function() { var t = this.closest("form"), n = t.find("[type=checkbox],[type=radio],[type=text]"), i = t.find(a).val(), o = [], s = n.filter("[type=checkbox]:checked"); if (s.length > 0) s.each(function() { o.push(e(this).val()) }); else { var d = n.filter("[type=radio]:checked"); d.length && o.push(d.val()) } return i && o.push(i), o = o.join("~"), o ? o : "" }, e.fn.demDoAction = function(t) { var i = this.first(), a = i.closest(n), s = { dem_pid: a.data("opts").pid, dem_act: t, action: "dem_ajax" }; return "undefined" == typeof s.dem_pid ? (console.log("Poll id is not defined!"), !1) : "vote" != t || (s.answer_ids = i.demCollectAnsw(), s.answer_ids) ? "delVoted" != t || confirm(i.data("confirm-text")) ? "newAnswer" == t ? (i.demAddAnswer(), !1) : (i.demSetLoader(), e.post(d.ajaxurl, s, function(e) { i.demUnsetLoader(), i.closest(o).html(e).demInitActions() }), !1) : !1 : (d.demShake(i), !1) }, e.fn.demCacheShowNotice = function(e) { var t = this.first(), n = t.find(".dem-youarevote").first(); return "blockForVisitor" == e && (t.find(".dem-revote-button").remove(), n = t.find(".dem-only-users").first()), t.prepend(n.show()), setTimeout(function() { n.slideUp("slow") }, 1e4), this }, d.cacheSetAnswrs = function(t, n) { var i = n.split(/,/); if (t.hasClass("voted")) { var o = t.find(".dem-answers"), a = o.data("voted-class"), s = o.data("voted-txt"); e.each(i, function(n, i) { t.find('[data-aid="' + i + '"]').addClass(a).attr("title", function() { return s + e(this).attr("title") }) }), t.find(".dem-vote-link").remove() } else { var d = t.find("[data-aid]"), r = t.find(".dem-voted-button"); e.each(i, function(e, t) { d.filter('[data-aid="' + t + '"]').find("input").prop("checked", "checked") }), d.find("input").prop("disabled", "disabled"), t.find(".dem-vote-button").remove(), r.length ? r.show() : (t.find('input[value="vote"]').remove(), t.find(".dem-revote-button-wrap").show()) } }, e.fn.demCacheInit = function() { return this.each(function() { var t = e(this), i = t.prev(n); if (i.length || (i = t.closest(n)), !i.length) return void console.log("Main dem div not found"); var a = i.find(o).first(), s = i.data("opts").pid, r = Cookies.get("demPoll_" + s), c = "notVote" == r ? !0 : !1, f = !("undefined" == typeof r || c), l = t.find(o + "-cache.vote").html(), h = t.find(o + "-cache.voted").html(); if (l) { var u = f && h; if (a.html((u ? h : l) + "").removeClass("vote voted").addClass(u ? "voted" : "vote"), f && d.cacheSetAnswrs(a, r), a.demInitActions(1), !c && !f && 1 == t.data("opt_logs")) { var m, p = function() { clearTimeout(m) }, v = function() { m = setTimeout(function() { if (!i.hasClass("checkAnswDone")) { i.addClass("checkAnswDone"); var t = i.find(".dem-link").first(); t.demSetLoader(), e.post(d.ajaxurl, { dem_pid: i.data("opts").pid, dem_act: "getVotedIds", action: "dem_ajax" }, function(e) { t.demUnsetLoader(), e && (a.html(h), d.cacheSetAnswrs(a, e), a.demInitActions(), a.demCacheShowNotice(e)) }) } }, 700) }; i.hover(v, p), i.click(v) } } }) }, d.detectRealHeight = function(e) { var t = e.clone().css({ height: "auto" }).insertBefore(e), n = "border-box" == t.css("box-sizing") ? parseInt(t.css("height")) : t.height(); return t.remove(), n }, d.setHeight = function(t, n) { var i = d.detectRealHeight(t); n ? t.css({ height: i }) : t.css({ opacity: 0 }).animate({ height: i }, d.speed, function() { e(this).animate({ opacity: 1 }, 1.5 * d.speed) }) }, d.setAnswsMaxHeight = function(t) { if ("-1" !== d.answMaxHeight && "0" !== d.answMaxHeight && d.answMaxHeight) { var n = t.find(".dem-vote, .dem-answers").first(), i = parseInt(d.answMaxHeight); n.css({ "max-height": "none", "overflow-y": "visible" }); var o = "border-box" == n.css("box-sizing") ? parseInt(n.css("height")) : n.height(), a = o - i; if (a > 100) { n.css("position", "relative"); var s, r = e('<span class="dem__collapser"><span class="arr"></span></span>').appendTo(n), c = function() { r.addClass("expanded").removeClass("collapsed") }, f = function() { r.addClass("collapsed").removeClass("expanded") }; t.data("expanded") ? c() : (f(), n.height(i).css("overflow-y", "hidden")), r.hover(function() { t.data("expanded") || (s = setTimeout(function() { r.trigger("click") }, 1e3)) }, function() { clearTimeout(s) }), r.click(function() { if (clearTimeout(s), t.data("expanded")) f(), t.data("expanded", !1), t.height("auto"), n.stop().css("overflow-y", "hidden").animate({ height: i }, d.speed, function() { d.setHeight(t, !0) }); else { c(); var e = d.detectRealHeight(n); e += 7, t.data("expanded", !0), t.height("auto"), n.stop().animate({ height: e }, d.speed, function() { d.setHeight(t, !0), n.css("overflow-y", "visible") }) } }) } } }, d.maxAnswLimit = function() { i.on("change", "[type=checkbox]", function() { var t = e(this).closest(n).data("opts").max_answs, i = e(this).closest(o).find("[type=checkbox]"), a = i.filter(":checked").length; a >= t ? i.filter(":not(:checked)").each(function() { e(this).prop("disabled", "disabled").closest("li").addClass("dem-disabled") }) : i.each(function() { e(this).removeProp("disabled").closest("li").removeClass("dem-disabled") }) }) }, d.demShake = function(e) { var t = e.css("position"); for (t && "static" !== t || e.css("position", "relative"), t = 1; 2 >= t; t++) e.animate({ left: -10 }, 50).animate({ left: 10 }, 100).animate({ left: 0 }, 50) }, d.demLoadingDots = function(e) { var n = e, i = n.is("input"), o = i ? n.val() : n.html(); "..." === o.substring(o.length - 3) ? i ? n[0].value = o.substring(0, o.length - 3) : n[0].innerHTML = o.substring(0, o.length - 3) : i ? n[0].value += "." : n[0].innerHTML += ".", t = setTimeout(function() { d.demLoadingDots(n) }, 200) }) }! function(e) { if ("function" == typeof define && define.amd) define(e); else if ("object" == typeof exports) module.exports = e(); else { var t = window.Cookies, n = window.Cookies = e(); n.noConflict = function() { return window.Cookies = t, n } } }(function() { function e() { for (var e = 0, t = {}; e < arguments.length; e++) { var n = arguments[e]; for (var i in n) t[i] = n[i] } return t } function t(n) { function i(t, o, a) { var s; if ("undefined" != typeof document) { if (arguments.length > 1) { if (a = e({ path: "/" }, i.defaults, a), "number" == typeof a.expires) { var d = new Date; d.setMilliseconds(d.getMilliseconds() + 864e5 * a.expires), a.expires = d } try { s = JSON.stringify(o), /^[\{ \[]/.test(s) && (o = s) } catch (r) {} return o = n.write ? n.write(o, t) : encodeURIComponent(String(o)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent), t = encodeURIComponent(String(t)), t = t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent), t = t.replace(/[\(\)]/g, escape), document.cookie = [t, "=", o, a.expires && "; expires=" + a.expires.toUTCString(), a.path && "; path=" + a.path, a.domain && "; domain=" + a.domain, a.secure ? "; secure" : ""].join("") } t || (s = {}); for (var c = document.cookie ? document.cookie.split("; ") : [], f = /(%[0-9A-Z]{ 2} )+/g, l = 0; l < c.length; l++) { var h = c[l].split("="), u = h[0].replace(f, decodeURIComponent), m = h.slice(1).join("="); '"' === m.charAt(0) && (m = m.slice(1, -1)); try { if (m = n.read ? n.read(m, u) : n(m, u) || m.replace(f, decodeURIComponent), this.json) try { m = JSON.parse(m) } catch (r) {} if (t === u) { s = m; break } t || (s[u] = m) } catch (r) {} } return s } } return i.set = i, i.get = function(e) { return i(e) }, i.getJSON = function() { return i.apply({ json: !0 }, [].slice.call(arguments)) }, i.defaults = {}, i.remove = function(t, n) { i(t, "", e(n, { expires: -1 })) }, i.withConverter = t, i } return t(function() {}) }); var demjquerywait = setInterval(function() { "undefined" != typeof jQuery && (clearInterval(demjquerywait), jQuery(document).ready(dem_ready)) }, 50); </script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.7.8'></script> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll": "1" }; /* ]]> */ </script> <script type='text/javascript' src='https://gamevid.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript' src='https://gamevid.ru/wp-content/plugins/wp-postratings/js/postratings-js.js?ver=1.84'></script> <script type='text/javascript' src='https://gamevid.ru/wp-content/plugins/disqus-comment-system/media/js/disqus.js?ver=4.7.8'></script> <script type='text/javascript' src='https://gamevid.ru/wp-content/plugins/disqus-comment-system/media/js/count.js?ver=4.7.8'></script> </div> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> </body> </html>