> For the complete documentation index, see [llms.txt](https://docs.norrnext.com/norrcompetition/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.norrnext.com/norrcompetition/best-practices/how-to-create-photo-video-voting-contest-on-joomla.md).

# Tutorial: How to Create Photo/Video Voting Contest on Joomla

In this tutorial we will cover a practical walkthrough on organizing photo and video voting contests on a Joomla-based website, including configuration tips, custom fields, frontend submission, and moderation workflows.

**This is a step-by-step guide with an accompanying video tutorial.**

This tutorial is available in other languages:

* [Bulgarian](https://www.it-playground.net/bg/%D0%B1%D0%BB%D0%BE%D0%B3/urok-kak-da-sazdadem-konkurs-s-video-izobrajenia-v-joomla)
* [French](https://www.betterweb.fr/extensions/comment-creer-un-concours-photo-video-dans-joomla)
* [German](https://www.jug-zueri.ch/manuals/norrnext/tutorial-foto-video-wettbewerbe-mit-norrcompetition)
* [Italian](https://www.frascan.com/blog/tutorial-come-realizzare-un-concorso-fotografico-e-o-video-con-joomla.html)
* [Polish](https://www.joomla-monster.pl/pomoc/dokumentacja?view=article\&id=1419\&catid=215)
* [Spanish](https://robustiana.com/355-norrcompetition-organiza-competiciones-concursos-en-joomla-en-minutos)
* [Russian](https://joomlaportal.ru/blogs/extensions/2908-kak-sozdat-golosovanie-za-foto-i-video-na-joomla-urok)
* [Turkish](https://www.joomlavia.com/joomla-dersleri/297-joomla-da-fotograf-ve-video-oylama-yarismasi-nasil-olusturulur)

{% embed url="<https://youtu.be/HC8myH3n4V4>" %}
A step-by-step video walkthrough
{% endembed %}

### Getting Started

First, download the NorrCompetition package from the [Product page](https://norrnext.com/joomla-extensions/norrcompetition).

After acquiring the package, navigate to the **My Downloads** section on the NorrNext website.

<figure><picture><source srcset="/files/4yqpOXhvgodAcNYiyOjg" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-612e4aa55e9500410cadd52d13ee181db355dc86%2Fnc00-min.png?alt=media" alt="NorrCompetition - download page"></picture><figcaption><p>NorrCompetition download area</p></figcaption></figure>

Install the package via standard Joomla extension manager (**System > Install > Extensions**). NorrCompetition provides core modules (Contests, Entries, Grid) and plugins (Notifications, Smart Search, Sitemap, Profile Link, Remote Storage).

NorrCompetition is localized into multiple languages. You can install pre-built language packs or contribute translations via Transifex. See the list of available translations on the [Translations page](https://norrnext.com/translations/norrcompetition).

After installation, the component creates a dedicated admin menu. On first visit to the dashboard, you can optionally install sample data to test workflows with pre-populated demo contests.

<figure><picture><source srcset="/files/Hd3k22TxAuEq6dajkJhr" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-368c013896e0f78a0f17b23a2870d86cf3350d84%2Fnc01-min.png?alt=media" alt="NorrCompetition dashboard"></picture><figcaption><p>NorrCompetition Dashboard</p></figcaption></figure>

### Core Structure

NorrCompetition is organized around four primary entities:

* **Categories** – Organizes contests into thematic groups.
* **Custom Fields** – Additional structured metadata fields (Text, Textarea, URL, Calendar, Checkbox, Radio, List) assigned to contests.
* **Contests** – The main competition containers. Supports 3 types: **Photo**, **Video**, and **Simple** (text/HTML snippets).
* **Entries** – Contest participant works submitted by contestants and approved by moderators.

#### Workflow Order

1. Create **Categories**.
2. Create **Custom Fields**.
3. Create a **Contest**, assign it to a Category, and link the required Custom Fields.
4. Add **Entries** (via backend or frontend submission form).

### Designing the Contest Concept

Consider a nightlife and city entertainment portal as an example. We will organize four contests:

1. **Miss of the Month** (Photo Contest)
   * Name – Title
   * Club – Text
   * Date – Calendar
   * Social Profile – URL
2. **Mister of the Month** (Photo Contest)
   * Name – Title
   * Club – Text
   * Date – Calendar
   * Social Profile – URL
3. **Live Show of the Month** (Video Contest)
   * Band – Title
   * Club – Text
   * Description – Text Area (WYSIWYG/HTML)
4. **Alternative Art** (Photo Contest with Public Submissions)
   * Title – Title
   * Model – Text
   * Photographer – Text
   * Makeup – Text
   * Description – Text Area
   * Social Media – URL
   * Agree to Terms of Service – Checkbox

Create two categories for these contests: **Entertainment** and **Art & Images**.

#### Adding Custom Fields

In the administrator menu, navigate to **Components > NorrCompetition > Fields** and click **New**:

<figure><picture><source srcset="/files/m1ZrUtbA4V30lMyChk70" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-efff283de1bf038ab50f6e61faee8b8297b9e765%2Fnc02-min.png?alt=media" alt="Adding a custom field in NorrCompetition"></picture><figcaption><p>Creating a Custom Field</p></figcaption></figure>

<figure><picture><source srcset="/files/5b2WmI0iQolRmoB9gN5P" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-90a45fe373ee5cc0a46b3c8fd87eb3580f010531%2Fnc03.png?alt=media" alt="List of custom fields in NorrCompetition"></picture><figcaption><p>Custom Fields List</p></figcaption></figure>

#### Creating a Contest

Navigate to **Components > NorrCompetition > Contests** and click **New**:

<figure><picture><source srcset="/files/C0Qvr2WeT1iD3lSoElht" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-38b094b48e8664334ffb787dd7d43ccc3db10012%2Fnc04-min.png?alt=media" alt="Adding a contest in NorrCompetition"></picture><figcaption><p>Creating a Contest</p></figcaption></figure>

1. **General Tab:** Enter Title, Description, select Category, and choose Contest Type (**Photo**).

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>Once entries are added to a contest, its type cannot be changed.</p></div>
2. **Dates:** Set **Start Date**, **Vote Start Date**, and **End Date**. When the End Date is reached, the contest automatically transitions to **Completed** status and displays final results.
3. **Fields Tab:** Select the Custom Fields to assign to this contest.

<figure><picture><source srcset="/files/pCLeKS8BB6QkYWAY16Rq" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-2a25841ea44d039555552f75ef1cc0360ebcdca7%2Fnc05.png?alt=media" alt="Assigning fields to contest"></picture><figcaption><p>Assigning Custom Fields to the Contest</p></figcaption></figure>

4. **Layout Options Tab:** Configure display parameters (entries per row, ordering, voting start countdown timer).

<figure><picture><source srcset="/files/W0yCMS4uO2CtfLiHIus2" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-37ded9dd73d3d1ed3b8ea1fadcbe236f03073bd4%2Fnc06.png?alt=media" alt="Contest layout options"></picture><figcaption><p>Contest Layout Options</p></figcaption></figure>

5. **Permissions Tab:** For contests that allow community submissions (e.g. *Alternative Art*), go to the **Permissions** tab, select the target user group (e.g. Registered or Public), and set **Create**, **Create Before Contest Start**, and **Create After Contest Start** to **Allowed**.

<figure><picture><source srcset="/files/1yaRdAkX51CSoq6WN0KK" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-bcbd5bdd08ca2d954f000dc73f431c3d158e5bb1%2Fnc07-min.png?alt=media" alt="Contest permissions"></picture><figcaption><p>Contest Permissions Configuration</p></figcaption></figure>

### Global Options Overview

Global options (**Components > NorrCompetition > Options**) define defaults that individual contests can inherit or override:

* **General:** Notifications on new/changed entries, social share buttons, theme layouts, UIkit settings.
* **Contest:** Entry limits per contestant, voting frequency, anti-fraud checks (IP, Cookie, Fingerprint, Verification Code), additional photo gallery toggle.
* **Comments:** Integrated comment systems (JComments, Disqus, Komento, Facebook, VK.com).
* **Images:** Small, Medium, Big dimensions, crop ratios, watermark settings.
* **Permissions:** Access control lists (ACL) for voting, submitting entries, and managing contests.

### Adding and Moderating Entries

#### Backend Entry Creation

Administrators can add entries directly from **Components > NorrCompetition > Entries > New**:

<figure><picture><source srcset="/files/AQAwUZAwtWtCMUBzVdgW" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-79cb4dc95787dcd7c90203a0b2e50475fed3b9fb%2Fnc09-min.png?alt=media" alt="Adding entry via backend"></picture><figcaption><p>Creating an Entry in Administrator</p></figcaption></figure>

#### Frontend Entry Submission

When permissions allow, contestants submit entries via the frontend submission form:

<figure><picture><source srcset="/files/CPZo7nM5G3kCVijCKZgN" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-7ff31ac2148e5361203fa64f2da8519e7ed2f7c8%2Fnc10-min%20(1).png?alt=media" alt="Frontend entry submission form"></picture><figcaption><p>Frontend Entry Submission Form</p></figcaption></figure>

#### Contestant Management & Revision Moderation

Contestants can manage their submissions on the **My Entries** page:

<figure><picture><source srcset="/files/8E0GlmmsDbuyb2LexWLn" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-ff91f43aae054b73512d07ab48acbfcac728d026%2Fnc11-min.png?alt=media" alt="My entries frontend view"></picture><figcaption><p>My Entries page</p></figcaption></figure>

When a contestant modifies an approved entry, the entry enters an unapproved state and appears in the moderator queue. Moderators can review differences using the built-in **Data Comparison** view:

<figure><picture><source srcset="/files/H70SfLIOmOE1lpBcTeLA" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-8e60bfd780076002dc04eff4eb3b30904940d8cb%2Fnc20-min.jpg?alt=media" alt="Entry revision data comparison"></picture><figcaption><p>Side-by-side Entry Revision Comparison</p></figcaption></figure>

### Active Contest Presentation

During the active voting phase, entries display vote counts, ratings, and action buttons according to contest layout settings:

<figure><picture><source srcset="/files/cFOHVEA2yZLjA7wNMyKn" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-b98c001eaa872465b7e38e340b7c9550af5ced39%2Fnc12-min-min.jpg?alt=media" alt="Active contest listing"></picture><figcaption><p>Active Contest View</p></figcaption></figure>

<figure><picture><source srcset="/files/iWdFRbgu5JuEvF6WvhQU" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-645901e913e641e4eb036c0ddb4d01d27b102e1d%2Fnc13-min.jpg?alt=media" alt="Entry details page"></picture><figcaption><p>Entry Details Page</p></figcaption></figure>

### Customizing Messages via Language Overrides

To guide visitors (for example, prompting guest users to log in or register before voting), create language overrides:

1. Navigate to **System > Manage > Language Overrides**.
2. Select the target language and client (**Site**).
3. Search for the constant `COM_COMPETITION_VOTE_ERROR_NO_PERMISSIONS`.
4. Enter your custom call-to-action text and save.

<figure><picture><source srcset="/files/tBvUAhg5NrmBOP6Dyz3C" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-a07d4734201d562d0cf7b226e66a5da0d94257df%2Fnc15-min.png?alt=media" alt="Creating a language override in Joomla"></picture><figcaption><p>Language Override in Joomla</p></figcaption></figure>

### Completed Contests & Results Display

When a contest ends, voting closes automatically and final results are calculated:

#### Grand Prix Award

Moderators can assign the special **Grand Prix** badge to an outstanding entry. The Grand Prix winner always displays with highest priority at the top of the completed contest page.

<figure><picture><source srcset="/files/tVtEVFE8CrrfS9uc4KPa" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-6ffd3e9fe9c7e5ea8be00d90e36218f390644a12%2Fnc21-min.jpg?alt=media" alt="Grand Prix entry display"></picture><figcaption><p>Grand Prix Winner Display</p></figcaption></figure>

#### Grouping Results by Custom Field

In **Contest > Layout Options > Completed Options**, you can enable **Grouping Field** (e.g. group winners by *City* or *Age Category*), displaying top entries for each unique field value:

<figure><picture><source srcset="/files/U92cHh5lhmWLvTw5itnr" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-92056d8cf55ba5840c3eefce03a7093385781eda%2Fnc22-min.png?alt=media" alt="Completed contest grouping options"></picture><figcaption><p>Completed Contest Grouping Options</p></figcaption></figure>

<figure><picture><source srcset="/files/HeeBKzM4KqLdyRWqgLve" media="(prefers-color-scheme: dark)"><img src="https://4110454137-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FemWP543OtNCmlHpJBjKV%2Fuploads%2Fgit-blob-61cdc71070c8def4d2d890666ff3fa514c81c43c%2Fnc23-min.jpg?alt=media" alt="Winners grouped by custom field"></picture><figcaption><p>Results Grouped by Custom Field</p></figcaption></figure>

### Monetization Options

NorrCompetition supports multiple monetization models:

* **NC Points System:** Utilize the native [NorrCompetition Points System](/norrcompetition/points-system/overview.md) (`plg_system_ncpoints`) to require user points for voting or entry submissions, integrated with e-commerce top-ups.
* **Paid Memberships & Subscriptions:** Grant voting or submission privileges via Joomla User Groups tied to subscription plans (see [Monetize Voting Contests via Membership](/norrcompetition/best-practices/monetize-voting-contests-via-membership.md)).

### Summary

NorrCompetition provides a flexible, modular architecture for organizing photo, video, and simple voting contests on Joomla. Built for Joomla 5+ and PHP 8.2+, it supports template overrides, WebAssetManager, typed events, and seamless ecosystem integrations.
