Layout & Content
Multi-column layout, add unlimited configurable columns with custom titles, links, and content
A custom footer for Magento 2 built from the admin: unlimited columns, CMS blocks inside columns, icons for 14+ social networks, a newsletter form and a back-to-top button. Each store view can have its own footer.
Key Features:
Additional Services
Built-in from day one. No add-ons, no upsell, no licence keys to renew.
Multi-column layout, add unlimited configurable columns with custom titles, links, and content
14+ supported networks, Facebook, Instagram, X (Twitter), YouTube, LinkedIn, Pinterest, TikTok, WhatsApp, Telegram, Threads, Reddit, Dis…
Native Magento integration, uses Magento's built-in newsletter subscriber system
Smooth scroll, native smooth-scroll with no jQuery dependency
Dedicated Stores → Configuration section, all settings under Panth Extensions → Footer
Zero JS on Luma when disabled, no assets loaded if features are disabled
Panth Custom Footer is a configurable footer builder for Magento 2 and Adobe Commerce that replaces the static default footer with multi-column content, social icons, a newsletter form, and a back-to-top button. Every block is admin-editable per store view, so the footer can differ across regions without code changes.
The Custom Footer renders unlimited columns with WYSIWYG content or embedded CMS blocks, plus drag-and-drop reordering directly from the admin grid. The mobile-first grid collapses cleanly on tablets and phones. Social icons cover 14+ networks (Facebook, Instagram, X, YouTube, LinkedIn, Pinterest, TikTok, WhatsApp, Telegram, Threads, Reddit, Discord, Snapchat, and more) with per-link rel="noopener" and target="_blank" controls plus custom ordering for SEO and security.
Native Magento newsletter integration uses AJAX submission with inline success/error messages, an optional GDPR consent checkbox, and reCAPTCHA compatibility. A back-to-top button ships with smooth-scroll, configurable scroll threshold, three corner positions, and proper ARIA labels. Custom Footer renders Hyva-native templates with Alpine.js and Tailwind utility classes plus lightweight Luma overrides. Markup is semantic HTML5 with social-profile schema, no layout shift, lazy-loaded SVG icons, and zero JS on Luma when features are disabled.
Custom Footer covers every footer surface from layout to behavior toggles:
rel/target controls.Panth Footer replaces the default Magento storefront footer with a configurable one. It adds a newsletter section, a grid of two to four footer columns (logo and about text, two link columns, and a contact column), a bottom bar with copyright text, payment icons and bottom links, and a floating back-to-top button. All content is entered in the admin configuration; no template editing is needed for day-to-day changes.
The module ships two template sets. The base layout uses vanilla JavaScript templates that work on Luma; when the Hyva theme is active the default_hyva layout handle switches the newsletter and back-to-top blocks to Alpine.js templates. It is used by store owners and content teams who want to manage footer content from the admin.
Product page: kishansavaliya.com/magento-2-footer.html
targettel: link), an email address (rendered as a mailto: link), a physical address and working hoursnewsletter/subscriber/new action with fetch() and shows Magento's own result message without a page reloadcheckout_cart_index and checkout_index_index remove it) so it never covers the order buttons or form fields, and it uses z-index 30. Floating elements share one bottom stack per side: back-to-top sits at the bottom, the WhatsApp button above it, the EU withdrawal tab (phones and tablets) above that. Each element adds --panth-bottom-bar-offset (bottom notification bars), the slot variables --panth-float-slot-btt-<side> and --panth-float-slot-wa-<side> of the elements below it, and --panth-float-edge (24px, 16px below 768px). The button hides while a drawer, modal, mini cart, open search or mobile menu is shown. Up to 1024px the footer adds bottom padding equal to the tallest float column plus 8px, so the last footer links can always be scrolled clear of the floats.{{year}} is replaced with the current year), Visa, Mastercard, PayPal and Amex icons, and a row of bottom links entered as JSONetc/theme-config.json; the module registers itself with the "Panth_Core" theme configuration so the colours can be managed centrallyview/frontend/layout/default.xml does the following on every frontend page:
footer_links, cms_footer_links_container, form.subscribe, newsletter_head_components, store_switcher, copyright, report.bugs, absolute_footer, footer-content and footer.newsletter.panth.footer (template Panth_Footer::footer.phtml) to the footer container, with the children panth.footer.newsletter (template Panth_Footer::luma/newsletter.phtml) and panth.footer.logo (alias logo, class Magento\Theme\Block\Html\Header\Logo, template Panth_Footer::logo.phtml).panth.footer.back_to_top (template Panth_Footer::luma/back-to-top.phtml) to before.body.end.sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==) and crossorigin="anonymous", so the browser refuses a modified file.Panth_Footer::css/footer-fonts.css, which declares the DM Sans font (weights 400 to 800, font-display: swap) from the self-hosted files view/frontend/web/fonts/dm-sans-latin.woff2 and dm-sans-latin-ext.woff2. No request is made to Google Fonts. DM Sans is licensed under the SIL Open Font License 1.1; the license text is in view/frontend/web/fonts/OFL.txt.view/frontend/layout/default_hyva.xml switches panth.footer.newsletter to Panth_Footer::hyva/newsletter.phtml and panth.footer.back_to_top to Panth_Footer::hyva/back-to-top.phtml. According to the layout comment this handle is added only when the Hyva theme is active.
Column links and bottom links are JSON arrays such as [{"title":"Contact Us","url":"/contact"},{"title":"Blog","url":"https://blog.example.com","target":"_blank"}]. Newsletter benefits are a JSON array of strings. The admin fields for these settings use the JsonBeautifier renderer, which adds format, minify and validate buttons.
Both newsletter templates submit the form with fetch() to newsletter/subscriber/new, including the form key and the X-Requested-With: XMLHttpRequest header. Magento's controller always answers with a redirect and stores its result message in the mage-messages cookie. After the request the templates read that cookie, show the message text (success styling only when every message is a success message) and remove the cookie so the message is not shown again on the next page. When no message is found, or the request fails, "Something went wrong. Please try again." is shown. Subscribers are stored by Magento's newsletter module.
view/frontend/templates/footer.phtml (columns and bottom bar, shared by both themes)view/frontend/templates/logo.phtml (footer logo)view/frontend/templates/luma/newsletter.phtml and view/frontend/templates/luma/back-to-top.phtml (vanilla JavaScript, inline styles)view/frontend/templates/hyva/newsletter.phtml and view/frontend/templates/hyva/back-to-top.phtml (Alpine.js and Tailwind classes)view/frontend/web/css/source/_module.less contains the Luma overrides and is compiled into Luma's styles-m.css and styles-l.css by Magento's LESS pipeline.
USER_GUIDE.md covers installation, checking that the module is active, general settings, configuring each column, social media links, the newsletter section, the back-to-top button, the bottom bar, colour customization and troubleshooting.
See CHANGELOG.md.
| Platform | Versions |
|---|---|
| Magento Open Source | 2.4.4 to 2.4.8 (as published on the product page) |
| Adobe Commerce | 2.4.4 to 2.4.8 (as published on the product page) |
| PHP | 8.1, 8.2, 8.3, 8.4 (`~8.1.0 |
| Themes | Hyva and Luma |
Composer constraints on Magento packages: magento/framework ^103.0, magento/module-store ^101.0, magento/module-theme ^101.0, magento/module-cms ^104.0, magento/module-config ^101.0.
mage2kishan/module-core ^1.0 (module "Panth_Core"); it is declared in require and Composer installs it automatically. The module's etc/module.xml sequences after "Panth_Core", "Magento_Store", "Magento_Theme" and "Magento_Cms".composer require mage2kishan/module-footer
bin/magento module:enable Panth_Core Panth_Footer
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush
setup:di:compile is only needed in production mode. setup:static-content:deploy -f is listed because the module ships a LESS file under view/frontend/web.
Check that the module is enabled:
bin/magento module:status Panth_Footer
Admin path: Stores > Configuration > Panth Extensions > Footer Configuration. The same page is reachable from the admin menu entry Panth Extensions > Footer > Configuration, which the module adds in etc/adminhtml/menu.xml.
All settings live under the config path prefix panth_footer/. Defaults come from etc/config.xml.
| Setting | Default | What it does |
|---|---|---|
| Enable Custom Footer | Yes | Renders the Panth footer template. The stock footer blocks are removed and the footer CSS is loaded only through the panth_footer_enabled layout handle, which is added while this setting is Yes. When set to No the theme's default footer (Luma links, newsletter and copyright, or the Hyva footer) is shown again. The back-to-top button has its own setting. |
| Footer Layout | 4 Columns | Number of columns rendered (2, 3 or 4). Only columns 1 to the chosen number are rendered, so a 3 column layout never shows column 4. |
Config paths: panth_footer/general/enabled, panth_footer/general/layout.
| Setting | Default | What it does |
|---|---|---|
| Enable Column 1 | Yes | Shows or hides column 1. |
| Show Logo | Yes | Shows the store logo (the header logo set under Content > Design > Configuration) linked to the home page. Nothing is shown when no logo file can be resolved. |
| Column Title | (empty) | Heading printed under the logo. Empty hides it. |
| About Text | "Your trusted partner for quality products and exceptional service. Shop with confidence." | Paragraph under the logo. The tags a, b, strong, em, i, u, small, span and br are kept; other HTML is escaped. |
| Show Social Media Icons | Yes | Shows the "Follow Us" label and the social icons for every non-empty URL in "Social Media Links". |
Config paths: panth_footer/column1/enabled, panth_footer/column1/show_logo, panth_footer/column1/title, panth_footer/column1/content, panth_footer/column1/show_social.
| Setting | Default | What it does |
|---|---|---|
| Enable Column 2 | Yes | Shows or hides column 2. |
| Column Title | Quick Links | Heading of the column. |
| Links (JSON Format) | My Account, Shopping Cart, Search Terms, Advanced Search | JSON array of objects with title, url and an optional target (_self, _blank, _parent or _top; other values are ignored). Links with _blank also get rel="noopener noreferrer". Only relative URLs and http, https, mailto and tel URLs are rendered; any other scheme is replaced with #. Entries without a title are skipped. Saving the section rejects invalid JSON (or a JSON value that is not a list) with an error message naming the field; valid JSON is stored compact, so saving unchanged values does not rewrite them. |
Config paths: panth_footer/column2/enabled, panth_footer/column2/title, panth_footer/column2/links.
| Setting | Default | What it does |
|---|---|---|
| Enable Column 3 | Yes | Shows or hides column 3. |
| Column Title | Customer Service | Heading of the column. |
| Links (JSON Format) | Contact Us, Customer Service, About Us, Orders and Returns | Same format and behaviour as column 2. |
Config paths: panth_footer/column3/enabled, panth_footer/column3/title, panth_footer/column3/links.
| Setting | Default | What it does |
|---|---|---|
| Enable Column 4 | Yes | Shows or hides column 4. |
| Column Title | Contact | Heading of the column. |
| Show Contact Information | Yes | Renders phone, email, address and working hours with Font Awesome icons. When No, column 4 is not rendered. |
| Phone Number | 1-800-SHOP-NOW | Rendered as a tel: link; characters other than digits and + are stripped from the link target. |
| Email Address | support@store.com | Rendered as a mailto: link. |
| Physical Address | 123 Commerce Street, Business City, BC 12345 | Plain text; <br> tags are kept. |
| Working Hours | Mon-Fri: 9AM-6PM | Plain text with a clock icon; <br> tags are kept. |
Config paths: panth_footer/column4/enabled, panth_footer/column4/title, panth_footer/column4/show_contact_info, panth_footer/column4/phone, panth_footer/column4/email, panth_footer/column4/address, panth_footer/column4/working_hours.
| Setting | Default | What it does |
|---|---|---|
| Facebook URL | https://facebook.com | Icon link, opened in a new tab. Empty hides the icon. |
| Twitter/X URL | https://twitter.com | Same. |
| Instagram URL | https://instagram.com | Same. |
| LinkedIn URL | (empty) | Same. |
| YouTube URL | (empty) | Same. |
| Pinterest URL | (empty) | Same. |
Only relative, http and https URLs are rendered; a URL with any other scheme hides that icon.
Config paths: panth_footer/social/facebook, panth_footer/social/twitter, panth_footer/social/instagram, panth_footer/social/linkedin, panth_footer/social/youtube, panth_footer/social/pinterest.
| Setting | Default | What it does |
|---|---|---|
| Enable Newsletter Section | Yes | Renders the newsletter block above the footer columns. |
| Section Title | Stay Connected | Heading. If empty the template falls back to "Stay in the Loop". |
| Section Subtitle | Get exclusive offers and updates delivered to your inbox | Text under the heading, with a built-in fallback when empty. |
| Benefits Text (JSON) | ["Exclusive offers","New arrivals first","Member-only sales"] | JSON array of strings shown with a check icon under the form. |
| Email Placeholder Text | Enter your email address | Placeholder of the email input. |
| Subscribe Button Text | Subscribe | Button label. |
Config paths: panth_footer/newsletter/enabled, panth_footer/newsletter/title, panth_footer/newsletter/subtitle, panth_footer/newsletter/benefits, panth_footer/newsletter/placeholder_text, panth_footer/newsletter/button_text.
| Setting | Default | What it does |
|---|---|---|
| Enable Back to Top Button | Yes | Renders the floating button in before.body.end. |
| Button Position | Bottom Right | Places the button at the bottom right or bottom left of the window in both templates. An older stored value of 1 is listed as "Bottom Right (legacy value)", renders at the bottom right and is kept when the section is saved. |
Config paths: panth_footer/back_to_top/enabled, panth_footer/back_to_top/position.
| Setting | Default | What it does |
|---|---|---|
| Show Payment Icons | Yes | Shows Visa, Mastercard, PayPal and Amex icons from Font Awesome. |
| Copyright Text | "© {{year}} Your Store. Crafted with care for an exceptional shopping experience." | {{year}} is replaced with the current year. The tags a, b, strong, em, i, u, small, span and br are kept; other HTML is escaped. HTML entities such as © stay as typed when the section is saved (the same applies to the About Text field). |
| Show Footer Bottom Links | Yes | Shows the bottom link row. |
| Footer Bottom Links (JSON) | Privacy Policy, Enable Cookies, Contact Us | Same format and URL rules as the column links, including target. |
Config paths: panth_footer/bottom/show_payment_icons, panth_footer/bottom/copyright_text, panth_footer/bottom/show_footer_links, panth_footer/bottom/footer_links.
The group comments in the admin note that footer, newsletter and back-to-top colours are not set here; they are managed through the Theme Customizer provided by "Panth_Core".
bin/magento module:disable Panth_Footer
composer remove mage2kishan/module-footer
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:flush
The module creates no tables. Saved configuration values under panth_footer/* remain in core_config_data after removal; delete them manually if they are no longer wanted. mage2kishan/module-core stays installed if other modules depend on it.
Commercial software license. See LICENSE.txt in this repository.
Panth_Footermage2kishan/module-footerPanth\FooterPanth\Footer\ViewModel\FooterData: view model passed to the templates as footer_view_model; exposes isEnabled(), getLayout(), getGridClasses(), getColumnData(int), getSocialLinks(), getSocialIcon(string), getCopyrightText(), showPaymentIcons(), showFooterLinks(), getFooterLinks(), isNewsletterEnabled(), getNewsletterTitle(), getNewsletterSubtitle(), getNewsletterBenefits(), getNewsletterPlaceholder(), getNewsletterButtonText(), isBackToTopEnabled(), getBackToTopPosition() and getAllowedHtmlTags()Panth\Footer\Helper\Data: reads the panth_footer/* configuration at store scope, parses the JSON fields with Magento\Framework\Serialize\Serializer\Json, and provides colour getters that read theme_customizer/* paths with hard-coded fallbacksPanth\Footer\Block\Adminhtml\Form\Field\JsonBeautifier: admin field renderer for the JSON textareasPanth\Footer\Model\Config\Source\Layout and Panth\Footer\Model\Config\Source\Position: option sources for "Footer Layout" and "Button Position"Panth\Footer\Model\Config\Backend\Enabled: backend model of "Enable Custom Footer"; it extends Magento\Framework\App\Config\Value without additional logicPanth\Footer\Model\Config\Backend\Json: backend model of the four JSON fields; validates the value on save and stores it compactPanth\Footer\Observer\AddEnabledHandle: frontend layout_load_before observer that adds the panth_footer_enabled handle (stock footer removal and footer CSS) while "Enable Custom Footer" is Yesetc/frontend/di.xml adds Panth_Footer to the registeredModules argument of Panth\Core\ViewModel\ThemeConfig; etc/theme-config.json holds the default colour valuesPanth_Footer::footer ("Footer") and Panth_Footer::config ("Configuration"), both under Panth_Core::panth_extensionsdb_schema.xml; the module creates no database tables| Module Category | Theme & UI |
|---|---|
| Best For | All Sizes |
Yes. When enabled, Panth Footer takes over the footer.container block and renders its own configurable footer. You can disable it any time to restore the default footer.
Yes. Panth Footer ships complete Hyva templates using Tailwind CSS and Alpine.js. No extra configuration needed, theme detection is automatic via Panth Core.
Yes. Every setting is store-view scoped, so you can have a completely different footer for each store view, including columns, social links, copyright, and colors.
The form submits to Magento's native newsletter subscriber system. If you have a Mailchimp/Klaviyo sync extension installed, subscribers flow through automatically. For direct API integration to external ESPs, we offer custom development, get a quote.
Yes. The footer uses semantic HTML5 (<footer>, <nav>), includes Organization / WebSite JSON-LD hints when enabled, and lazy-loads non-critical icons. Zero CLS impact on Core Web Vitals.
Yes. Each column supports a Custom HTML content type with a full WYSIWYG editor, so you can add any HTML, shortcodes, or inline CSS.
Yes. All strings use Magento's __() translation function. English translations are included; other languages can be added via standard Magento i18n CSV files.
Contact us for a live demo: kishansavaliya.com/contact.
Yes. There is no visible Panth branding on the storefront, the footer is 100% your content.
Yes. Panth Core is free and is installed automatically by Composer. It provides theme detection and shared admin configuration.
Talk to Kishan directly: written quote, scope and timeline within 24 hours. No sales call.
Custom Footer for Magento 2