One thing to improve Phoenix

General shopowner conversation that doesn’t quite fit into other sections.
Talk shop, share experiences, and connect with fellow Phoenix store owners.
User avatar
burt
Core Team
Posts: 4546
Joined: Tue Oct 29, 2019 9:37 am
Phoenix Version: v1.1.0.8
Has thanked: 252 times
Been thanked: 412 times

One thing to improve Phoenix

Post by burt »

If you have an idea, please let me know that ONE thing you have always thought might improve the Phoenix software or improve the wider Phoenix ecosphere. I don't have much time available for big changes, but I am open to any and all ideas.


Join The Code Co-op to get access to your library in the Code Co-op Forum
frankl
Builder
Posts: 159
Joined: Tue Feb 23, 2021 8:39 pm
Phoenix Version: v1.1.0.4
Has thanked: 17 times
Been thanked: 25 times

Re: One thing to improve Phoenix

Post by frankl »

Tabbed customers page in admin? Should be the same as products and orders
frankl
Builder
Posts: 159
Joined: Tue Feb 23, 2021 8:39 pm
Phoenix Version: v1.1.0.4
Has thanked: 17 times
Been thanked: 25 times

Re: One thing to improve Phoenix

Post by frankl »

Maybe also a way to select the way emails are sent?

sendmail
smtp
mailchimp
mailerlite
active campaign

etc

Probably a huge job :)
User avatar
burt
Core Team
Posts: 4546
Joined: Tue Oct 29, 2019 9:37 am
Phoenix Version: v1.1.0.8
Has thanked: 252 times
Been thanked: 412 times

Re: One thing to improve Phoenix

Post by burt »

frankl wrote: Wed Feb 11, 2026 3:01 am Tabbed customers page in admin? Should be the same as products and orders
TY

https://github.com/CE-PhoenixCart/Phoen ... ef0cdc2a66
User avatar
burt
Core Team
Posts: 4546
Joined: Tue Oct 29, 2019 9:37 am
Phoenix Version: v1.1.0.8
Has thanked: 252 times
Been thanked: 412 times

Re: One thing to improve Phoenix

Post by burt »

frankl wrote: Thu Feb 12, 2026 6:40 am Maybe also a way to select the way emails are sent?

sendmail
smtp
mailchimp
mailerlite
active campaign

etc

Probably a huge job :)
Yes, that would be a task. Do-able, as all tasks are, but not straightforward at all.
Certainly would not want to attempt this as part of the "usual schedule".

From memory;

sendmail is more or less the default
smtp (admin I think has some stuff related to it, but user needs to add a free addon, unsure of historical reasoning)
mailchimp (newsletter isn't it? maybe mandrill, which I have worked with in the pasat, but quite a few years back

mailerlite and active campaign I am unaware of. Active campaign sounds newslettery?
I am not here to build for you.
I am here to build with you. Let's help each other.
frankl
Builder
Posts: 159
Joined: Tue Feb 23, 2021 8:39 pm
Phoenix Version: v1.1.0.4
Has thanked: 17 times
Been thanked: 25 times

Re: One thing to improve Phoenix

Post by frankl »

I use Mandrill (now called Mailchimp Transactional) for order updates etc which I find more reliable delivery wise than sendmail. I don't use Mailchimp for newsletters through Phoenix Cart Admin.

It wasn't too difficult, just added a simple mailchimp connector

Code: Select all

<?php
class MailchimpTransactional {
    private $api_key;
    private $api_url = 'https://mandrillapp.com/api/1.0/messages/send.json';

    public function __construct() {
		if (!defined('MODULE_HEADER_TAGS_MAILCHIMP_TRANSACTIONAL_API_KEY')) {
			throw new Exception('MODULE_HEADER_TAGS_MAILCHIMP_TRANSACTIONAL_API_KEY is not defined.');
		}
		$this->api_key = MODULE_HEADER_TAGS_MAILCHIMP_TRANSACTIONAL_API_KEY;
	}

    public function sendEmail($to_name, $to_email_address, $email_subject, $email_text, $from_email_name, $from_email_address, $attachments = []) {
        $postData = [
            'key' => $this->api_key,
            'message' => [
                'from_email' => $from_email_address,
                'from_name' => $from_email_name,
                'subject' => $email_subject,
                'html' => $email_text,
                'to' => [
                    [
                        'email' => $to_email_address,
                        'name' => $to_name,
                        'type' => 'to'
                    ]
                ]
            ]
        ];
		
		if (!empty($attachments)) {
			foreach ($attachments as $attachment) {
				$postData['message']['attachments'][] = $attachment;
			}
		}

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->api_url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json'
        ]);

        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode == 200) {
            $responseArray = json_decode($response, true);
            if (isset($responseArray[0]['status']) && $responseArray[0]['status'] === 'sent') {
                return ['success' => true, 'message' => 'Email sent successfully.'];
            } else {
                return ['success' => false, 'message' => 'Error sending email: ' . json_encode($responseArray)];
            }
        } else {
            return ['success' => false, 'message' => 'HTTP Error: ' . $httpCode . ' - ' . $response];
        }
    }
}
and created new notification modules, for example:

Code: Select all

<?php
/*
  Mailchimp Transactional for Phoenix Cart

  Copyright (c) 2025 F. Ludriks

  Released under the GNU General Public License
*/

class n_password_forgotten_mailchimp extends abstract_module {

    const CONFIG_KEY_BASE = 'MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_';

    const TRIGGERS = [ 'password_forgotten' ];
    const REQUIRES = [ 'email_address' ];

    public function notify($data) {
		$mailer = new MailchimpTransactional;

        ob_start();
        include Guarantor::ensure_global('Template')->map(__FILE__);
        echo $GLOBALS['hooks']->cat('passwordForgottenNotification');
		$response = $mailer->sendEmail($data['name'], $data['email'], sprintf(MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_SUBJECT, STORE_NAME), ob_get_clean(), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
        return json_encode($response);
    }

    protected function get_parameters() {
        return [
            static::CONFIG_KEY_BASE . 'STATUS' => [
                'title' => 'Enable Password Forgotten Notification module',
                'value' => 'True',
                'desc' => 'Do you want to add the module to your shop?',
                'set_func' => "Config::select_one(['True', 'False'], ",
            ],
        ];
    }

}
Plus a template and language file for each of course

Code: Select all

<?php
$output = '<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Password Forgotten - ' . STORE_NAME . '</title>
</head>
<body style="margin: 0; padding: 0; background-color: #f4f4f4;">
<table width="100%" cellspacing="0" cellpadding="0" border="0" bgcolor="#f4f4f4">
    <tr>
        <td align="center">
            <table width="600" cellspacing="0" cellpadding="20" border="0" bgcolor="#ffffff" style="border-radius: 10px; box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1);">

                <!-- Logo -->
                    <tr>
                        <td align="center" style="padding: 20px;">
                            <img src="' . HTTP_SERVER . '/images/' . STORE_LOGO . '" width="200" style="display: block;" alt="' . STORE_NAME . ' Logo">
                        </td>
                    </tr>
                <!-- Title & Description -->
                <tr>
                    <td align="center" style="font-family: Arial, sans-serif; color: #333333; padding: 20px;">
                        <h1 style="margin: 0; font-size: 24px;">'
                            . sprintf(MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_TITLE, $data['name']) .
                            '</h1>

                        <p style="margin: 15px 0 25px 0; font-size: 16px; color: #555555;">'
                            . nl2br(sprintf(MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_RESET_BODY, '')) .
                            '</p>

                        <!-- Reset Password Button -->
                        <table cellspacing="0" cellpadding="0" border="0" align="center">
                            <tr>
                                <td align="center" bgcolor="#198754" style="border-radius: 6px;">
                                    <a href="' . htmlspecialchars($data['reset_url'], ENT_QUOTES, 'UTF-8') . '"
                                       target="_blank"
                                       style="display:inline-block;padding:14px 28px;font-size:16px;font-family:Arial,sans-serif;color:#ffffff;text-decoration:none;font-weight:bold;border-radius:6px;">
                                        Reset Your Password
                                    </a>
                                </td>
                            </tr>
                        </table>

                        <p style="margin-top: 15px; font-size: 13px; color: #999999;">
                            Or copy and paste this link into your browser:<br>
                            <a href="' . htmlspecialchars($data['reset_url'], ENT_QUOTES, 'UTF-8') . '"
                               style="color:#007bff; word-break: break-all;">'
                                . htmlspecialchars($data['reset_url'], ENT_QUOTES, 'UTF-8') .
                                '</a>
                        </p>

                        <p style="margin-top: 25px; font-size: 14px; color: #777777;">
                            This link will expire after 24 hours or once your password has been changed.
                        </p>
						<p style="margin-top: 25px; font-size: 14px; color: #777777;">
							' . MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_IGNORE . '
                        </p>
                    </td>
                </tr>

                <!-- Contact & Footer -->
                <tr>
                    <td align="center" style="font-family: Arial, sans-serif; color: #555555; font-size: 14px;">
                        <p>If you have any questions, please reply to this email.</p>
                        <p>' . STORE_NAME . ' • ABN: ' . STORE_TAX_ID . ' • ' . STORE_ADDRESS . ' • ' . STORE_PHONE . '</p>
                        <p><a href="' . HTTP_SERVER . '/contact_us.php" style="color: #007bff; text-decoration: none;">Need help? Contact Us</a></p>
                    </td>
                </tr>

                <tr>
                    <td align="center" bgcolor="#333333" style="font-family: Arial, sans-serif; color: #ffffff; font-size: 14px; padding: 10px; border-radius: 0 0 10px 10px;">
                        <p>Thank you for shopping with us!</p>
                    </td>
                </tr>

            </table>
        </td>
    </tr>
</table>
</body>
</html>';

echo $output;

Code: Select all

<?php
const MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_TEXT_TITLE = 'Password Forgotten for Mailchimp';
const MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_TEXT_DESCRIPTION = 'Send a notification when customer needs a password reset.';

const MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_SUBJECT = '%s - New Password';
const MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_TITLE = 'Hello %s' . "\n\n";
const MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_RESET_BODY = 'A new password has been requested for your profile at ' . STORE_NAME . '.' . "\n\n" . 'Please follow this personal link to securely change your password:' . "\n\n";
const MODULE_NOTIFICATIONS_PASSWORD_FORGOTTEN_MAILCHIMP_IGNORE = 'Please ignore if it wasn\'t you that requested to change your password.' . "\n\n";
frankl
Builder
Posts: 159
Joined: Tue Feb 23, 2021 8:39 pm
Phoenix Version: v1.1.0.4
Has thanked: 17 times
Been thanked: 25 times

Re: One thing to improve Phoenix

Post by frankl »

This is what the customer receives
password_forgotten.png
You do not have the required permissions to view the files attached to this post.
User avatar
Pierre_P
Contributor
Posts: 144
Joined: Fri Mar 12, 2021 5:06 am
Phoenix Version: v1.1.0.6
Has thanked: 21 times
Been thanked: 11 times

Re: One thing to improve Phoenix

Post by Pierre_P »

One thing to improve in my opinion is the process for a new installation.

Installing default settings becomes a nightmare for any user when they first reach the admin side and they see
all the settings is set so specific American standards.
As each user is unique, how about adding a new page for changing the default settings like country, zones, currencies and a whole list that can be added onto during install wizard?

This upfront configuration would significantly reduce the frustration new users could experience trying to locate and modify scattered settings after installation pondering on what to do next.
Consider this: Phoenix (like any other cart) is essentially as complex as setting up accounting software - you see all the features but none is making sense yet.
Users need clear guidance on how to configure it properly from the start. Without this, frustration and uncertainty can derail adoption before users even get their store running.

A guided setup would help users understand the platform's structure while ensuring their store is properly configured for their market from day one.
frankl
Builder
Posts: 159
Joined: Tue Feb 23, 2021 8:39 pm
Phoenix Version: v1.1.0.4
Has thanked: 17 times
Been thanked: 25 times

Re: One thing to improve Phoenix

Post by frankl »

burt wrote: Thu Feb 12, 2026 10:07 am
frankl wrote: Wed Feb 11, 2026 3:01 am Tabbed customers page in admin? Should be the same as products and orders
TY

https://github.com/CE-PhoenixCart/Phoen ... ef0cdc2a66
Wow, awesome!
Omar_one
Senior Contributor
Posts: 676
Joined: Fri Oct 25, 2019 5:06 pm
Phoenix Version: v1.0.8.16
Has thanked: 100 times
Been thanked: 56 times

Re: One thing to improve Phoenix

Post by Omar_one »

on the old days we used
- Mailchimp v3 add-on created by @burt (Built for Community Responsive) I still have the zip files :) (not working phoenixcart).
- Mailchimp newsletter Everywhere for footer box, we still have it installed on v1.08.16.

There is mailbeez module https://www.mailbeez.com/documentation/ ... CE-Phoenix I haven't tried.
Last edited by Omar_one on Tue Feb 17, 2026 9:52 am, edited 1 time in total.


Join The Code Co-op to get access to your library in the Code Co-op Forum
Post Reply