Files
prestashop-icons/README.md
myprestarocks 99a8f5bf9b Add shape prefix to symbol IDs, fix brand naming, add assets
- Symbol IDs now include shape for uniqueness: {shape}_{brand}_{mode}
  e.g., text-only_paypal_lm, rectangle_visa_la, icon_mastercard_dm
- Fixed brand name inconsistencies:
  - amazon_pay → amazon
  - naverpay → naver_pay
  - p24 → przelewy24
  - direct_debit → bacs (unified BACS Direct Debit name)
- Added font assets (FontAwesome, Material Icons)
- Added MprIconsAssets and MprIconsConfig classes
- Updated preview.html with shape parameter support
- All 752 icons complete (38 payment × 4 shapes × 4 modes + 12 social × 3 shapes × 4 modes)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 10:17:23 +00:00

284 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PrestaShop Icons
Semantic icon helper for PrestaShop modules.
```php
MprIcons::get('account'); // Just works
```
## How It Works
- **Admin**: Uses Material Icons (auto-detected)
- **Front**: Reads from `ps_mpr_config` table, defaults to Font Awesome
## Setup (Module Install)
Call `init()` from your module's install method:
```php
public function install()
{
MprIcons::init(); // Creates config table, detects theme icons
return parent::install();
}
```
This will:
1. Create `ps_mpr_config` table if it doesn't exist
2. Detect theme icon set (checks theme.yml, assets for Material)
3. Save the detected preference
## PHP
```php
use MyPrestaRocks\Icons\MprIcons;
// Just call get() - it figures out the rest
echo MprIcons::get('account');
echo MprIcons::get('cart');
echo MprIcons::get('success', 'text-green'); // With extra class
// Get raw class/name (no HTML)
$class = MprIcons::raw('edit'); // 'fa fa-pencil' or 'edit'
```
## JavaScript
Include the script and set icon set from PHP:
```php
// In your module
$this->context->controller->addJS($this->getLocalPath() . 'vendor/myprestarocks/prestashop-icons/js/mpr-icons.js');
Media::addJsDef(['mprIconSet' => MprIcons::getIconSet()]);
```
```javascript
MprIcons.get('account'); // HTML string
MprIcons.create('warning'); // DOM element
MprIcons.raw('edit'); // Class/name only
```
## Configuration
Front office icon set is stored in `ps_mpr_config`:
- module: `mpr_global`
- key: `front_icon_set`
- value: `fontawesome` or `material`
```php
// Save preference
MprIcons::saveIconSet('material');
```
## Admin Configuration Form
Add icon settings to your module's admin page using `MprIconsConfig`:
```php
use MyPrestaRocks\Icons\MprIconsConfig;
// In getConfigForm() - add fields to your form
$fields_form[]['form'] = [
'legend' => ['title' => 'Icon Settings'],
'input' => MprIconsConfig::getFormFields(),
'submit' => ['title' => $this->l('Save')],
];
// In getConfigFormValues() - get current values
$values = array_merge($values, MprIconsConfig::getFormValues());
// In postProcess() - save when form submitted
if (Tools::isSubmit('submitConfig')) {
MprIconsConfig::processForm();
}
```
This creates a form with:
- **Icon Set selector**: Font Awesome or Material Icons
- **Self-host toggle**: Include icon fonts from module (for themes without icons)
## Self-Hosted Icon Fonts
If a theme doesn't include Font Awesome or Material Icons, enable self-hosting:
```php
// In hookHeader or setMedia
public function hookHeader()
{
MprIcons::registerAssets($this);
}
```
This will:
1. Check if self-hosting is enabled in config
2. Register the appropriate CSS file (Font Awesome or Material Icons)
3. Load fonts from `assets/fontawesome/` or `assets/material-icons/`
**Bundled assets:**
- Font Awesome 4.7.0 (~30KB CSS + ~80KB woff2)
- Material Icons (~1KB CSS + ~128KB woff2)
## Available Icons
| Name | Font Awesome | Material |
|------|--------------|----------|
| `account` | `fa fa-user` | `person` |
| `cart` | `fa fa-shopping-cart` | `shopping_cart` |
| `orders` | `fa fa-list` | `receipt_long` |
| `success` | `fa fa-check` | `check` |
| `error` | `fa fa-times` | `close` |
| `warning` | `fa fa-exclamation-triangle` | `warning` |
| `info` | `fa fa-info-circle` | `info` |
| `edit` | `fa fa-pencil` | `edit` |
| `delete` | `fa fa-trash` | `delete` |
| `search` | `fa fa-search` | `search` |
| `settings` | `fa fa-cog` | `settings` |
| `email` | `fa fa-envelope` | `email` |
| `phone` | `fa fa-phone` | `phone` |
| `lock` | `fa fa-lock` | `lock` |
| `logout` | `fa fa-sign-out` | `logout` |
| `home` | `fa fa-home` | `home` |
| `address` | `fa fa-map-marker` | `location_on` |
| `truck` | `fa fa-truck` | `local_shipping` |
| `credit-card` | `fa fa-credit-card` | `credit_card` |
| `calendar` | `fa fa-calendar` | `calendar_today` |
| `heart` | `fa fa-heart` | `favorite` |
| `star` | `fa fa-star` | `star` |
| `eye` | `fa fa-eye` | `visibility` |
| `eye-off` | `fa fa-eye-slash` | `visibility_off` |
| `close` | `fa fa-times` | `close` |
| `check` | `fa fa-check` | `check` |
| `plus` | `fa fa-plus` | `add` |
| `minus` | `fa fa-minus` | `remove` |
| `chevron-*` | `fa fa-chevron-*` | `chevron_*` |
| `arrow-*` | `fa fa-arrow-*` | `arrow_*` |
| `download` | `fa fa-download` | `download` |
| `upload` | `fa fa-upload` | `upload` |
| `refresh` | `fa fa-refresh` | `refresh` |
| `spinner` | `fa fa-spinner fa-spin` | `hourglass_empty` |
| `loading` | `fa fa-circle-o-notch fa-spin` | `autorenew` |
Full list: `MprIcons::list()`
## SVG Sprites
For brand icons (payments, social), use the included SVG sprites. One request, multiple icons.
### Sprite Structure
```
sprites/
├── payments/
│ ├── icon-lm.svg # Logo mark, light mode
│ ├── icon-dm.svg # Logo mark, dark mode
│ ├── icon-la.svg # Logo mark, light accent
│ ├── icon-da.svg # Logo mark, dark accent
│ ├── square-lm.svg # Square format, light mode
│ ├── square-dm.svg # Square format, dark mode
│ ├── square-la.svg # Square format, light accent
│ ├── square-da.svg # Square format, dark accent
│ ├── rectangle-lm.svg # Button shape, light mode
│ ├── rectangle-dm.svg # Button shape, dark mode
│ ├── rectangle-la.svg # Button shape, light accent
│ ├── rectangle-da.svg # Button shape, dark accent
│ ├── text-only-lm.svg # Text only, light mode
│ ├── text-only-dm.svg # Text only, dark mode
│ ├── text-only-la.svg # Text only, light accent
│ └── text-only-da.svg # Text only, dark accent
└── socials/
├── icon-lm.svg
├── icon-dm.svg
├── icon-la.svg
├── icon-da.svg
├── full-logo-lm.svg
├── full-logo-dm.svg
├── full-logo-la.svg
├── full-logo-da.svg
├── text-only-lm.svg
├── text-only-dm.svg
├── text-only-la.svg
└── text-only-da.svg
```
### Variants Explained
| Suffix | Mode | Use Case |
|--------|------|----------|
| `-lm` | Light Mode | Dark icons for light backgrounds |
| `-dm` | Dark Mode | White icons for dark backgrounds |
| `-la` | Light Accent | Brand colors on light backgrounds |
| `-da` | Dark Accent | Brand colors on dark backgrounds |
| Shape | Description | Typical Size |
|-------|-------------|--------------|
| `icon` | Logo mark only | 24×24, 32×32 |
| `square` | Square with padding | 45×45 |
| `rectangle` | Card/button shape | 60×38 |
| `text-only` | Brand name text | varies |
| `full-logo` | Logo + brand name (socials) | varies |
### Payment Icons
Copy the sprite you need to your module, include once, use anywhere:
```php
// In module install or build step
copy(
_PS_MODULE_DIR_ . 'yourmodule/vendor/myprestarocks/prestashop-icons/sprites/payments/square-lm.svg',
_PS_MODULE_DIR_ . 'yourmodule/views/img/payments.svg'
);
```
```html
<!-- Include sprite (hidden) -->
{include file="module:yourmodule/views/img/payments.svg"}
<!-- Use icons - format: {shape}_{brand}_{mode} -->
<svg width="45" height="45"><use href="#square_visa_lm"/></svg>
<svg width="45" height="45"><use href="#square_mastercard_lm"/></svg>
<svg width="45" height="45"><use href="#square_paypal_lm"/></svg>
```
**Available payment brands (38):**
afterpay, alipay, alma, amazon, american_express, apple_pay, bacs, bancontact, bank, billie, blik, cartes_bancaires, cod, credit_pay, eps, google_pay, ideal, jcb, kakao_pay, klarna, link, mastercard, mobilepay, multibanco, naver_pay, przelewy24, payco, paypal, pickup, point_of_sale, quote, revolut, samsung_pay, satispay, sepa, twint, visa, wechat_pay
### Social Icons
```html
{include file="module:yourmodule/views/img/socials.svg"}
<!-- format: {shape}_{brand}_{mode} -->
<svg width="24" height="24"><use href="#icon_facebook_lm"/></svg>
<svg width="24" height="24"><use href="#icon_x_lm"/></svg>
<svg width="24" height="24"><use href="#icon_google_lm"/></svg>
```
**Available social brands (12):**
amazon, apple, facebook, google, linkedin, microsoft, outlook, paypal, reddit, tiktok, x, yahoo
### Icon ID Format
Icon IDs follow the pattern: `{shape}_{brand}_{mode}`
Examples:
- `icon_visa_lm` - Visa icon, light mode
- `square_visa_dm` - Visa square, dark mode
- `rectangle_paypal_la` - PayPal rectangle, light accent
- `text-only_mastercard_lm` - Mastercard text only, light mode
- `full-logo_facebook_da` - Facebook full logo, dark accent
### Styling
```css
.payment-icon { width: 45px; height: 45px; }
.payment-icon-rect { width: 60px; height: 38px; }
.social-icon { width: 24px; height: 24px; }
```
## License
MIT