Commit fb027575 by dhn

Merge branch 'developer' of http://47.99.244.21:9999/root/joshine into Branch_developer

parents aa675cdd e4165b18
<?php
namespace Joshine\InstagramFeed\Block\Adminhtml\System\Config;
use Magento\Backend\Block\Template;
use Magento\Config\Block\System\Config\Form\Field;
use Magento\Framework\Data\Form\Element\AbstractElement;
use Magento\Framework\View\Helper\SecureHtmlRenderer;
use Magento\Backend\Block\Context;
use Magento\Backend\Model\Auth\Session;
use Magento\Config\Block\System\Config\Form\Fieldset;
use Magento\Cron\Model\ResourceModel\Schedule\CollectionFactory;
use Magento\Framework\App\DeploymentConfig\Reader;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\App\ProductMetadataInterface;
use Magento\Framework\App\ResourceConnection;
use Magento\Framework\App\State;
use Magento\Framework\View\Helper\Js;
class Account extends Fieldset
{
/**
* @var SecureHtmlRenderer
*/
/**
* @var CollectionFactory
*/
private $cronFactory;
/**
* @var DirectoryList
*/
private $directoryList;
/**
* @var ResourceConnection
*/
private $resourceConnection;
/**
* @var ProductMetadataInterface
*/
private $productMetadata;
/**
* @var Reader
*/
private $reader;
/**
* @var Field|null
*/
protected $fieldRenderer;
public function __construct(
Context $context,
Session $authSession,
Js $jsHelper,
CollectionFactory $cronFactory,
DirectoryList $directoryList,
Reader $reader,
ResourceConnection $resourceConnection,
ProductMetadataInterface $productMetadata,
AccountField $accountField,
array $data = []
) {
parent::__construct($context, $authSession, $jsHelper, $data);
$this->cronFactory = $cronFactory;
$this->directoryList = $directoryList;
$this->resourceConnection = $resourceConnection;
$this->productMetadata = $productMetadata;
$this->reader = $reader;
}
public function render(AbstractElement $element)
{
$html = $this->_getHeaderHtml($element);
$html .= $this->getHtml($element);
$html .= $this->_getFooterHtml($element);
return $html;
}
/**
* @return \Magento\Framework\View\Element\BlockInterface
*/
private function getFieldRenderer()
{
if (empty($this->fieldRenderer)) {
$this->fieldRenderer = $this->_layout->createBlock(
Field::class
);
}
return $this->fieldRenderer;
}
private function getHtml($element)
{
$block = $this->_layout->createBlock(AccountField::class);
return $block->toHtml();
}
/**
* @param AbstractElement $fieldset
* @param string $fieldName
* @param string $label
* @param string $value
*
* @return string
*/
protected function getFieldHtml($fieldset, $fieldName, $label = '', $value = '')
{
$field = $fieldset->addField($fieldName, 'label', [
'name' => 'dummy',
'label' => $label,
'after_element_html' => $value,
])->setRenderer($this->getFieldRenderer());
return $field->toHtml();
}
}
\ No newline at end of file
<?php
namespace Joshine\InstagramFeed\Block\Adminhtml\System\Config;
use Joshine\InstagramFeed\Block\ApiAddress;
use Magento\Framework\View\Element\Template;
class AccountField extends Template
{
protected $_template = 'Joshine_InstagramFeed::accountField.phtml';
/**
* @var ApiAddress
*/
private $apiAddress;
public function __construct(
Template\Context $context,
ApiAddress $apiAddress,
array $data = []
) {
$this->apiAddress = $apiAddress;
parent::__construct($context, $data);
}
public function getAuthUrl()
{
return $this->apiAddress->authUrl();
}
}
\ No newline at end of file
<?php
namespace Joshine\InstagramFeed\Block\Adminhtml\System\Config;
use Magento\Config\Block\System\Config\Form\Field;
use Magento\Framework\Data\Form\Element\AbstractElement;
class Head extends Field
{
public function render(AbstractElement $element)
{
$html = '';
if ($element->getComment()) {
$html .= '<div style="margin: auto; width: 40%;padding: 10px;">'
. $element->getComment()
. '</div>';
}
return $html;
}
protected function _getElementHtml(AbstractElement $element)
{
return $this->_toHtml();
}
}
<?php
namespace Joshine\InstagramFeed\Block;
use Magento\Backend\Block\Template;
use Magento\Directory\Helper\Data as DirectoryHelper;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\Json\Helper\Data as JsonHelper;
use Magento\Store\Model\ScopeInterface;
class ApiAddress extends Template
{
const INSTAGRAM_API_BASE_URL = 'https://api.instagram.com';
const INSTAGRAM_AUTH_URL = 'oauth/authorize';
const REDIRECT_URL = 'admin/joshine_instagram/oauth/redirect';
protected $_objectManager;
public function __construct(
Template\Context $context,
array $data = [],
\Magento\Framework\ObjectManagerInterface $objectManager
)
{
$this->_objectManager = $objectManager;
parent::__construct($context, $data);
}
public function getAppid()
{
return $this->_objectManager->get(ScopeConfigInterface::class)
->getValue(
'joshine_instagram_feed/general/appid',
ScopeInterface::SCOPE_STORE
);
}
public function getAppSecret()
{
return $this->_objectManager->get(ScopeConfigInterface::class)
->getValue(
'joshine_instagram_feed/general/app_secret',
ScopeInterface::SCOPE_STORE
);
}
public function redirectUri() :string
{
return $this->getBaseUrl().self::REDIRECT_URL;
}
public function authUrl() : string
{
return self::INSTAGRAM_API_BASE_URL.'/'
.self::INSTAGRAM_AUTH_URL.
"?client_id={$this->getAppid()}&redirect_uri={$this->redirectUri()}&scope=user_profile,user_media&response_type=code";
}
}
\ No newline at end of file
<?php
namespace Joshine\InstagramFeed\Controller\Adminhtml\Feed;
use Magento\Backend\App\Action;
class Get extends Action
{
public function execute()
{
// TODO: Implement execute() method.
}
}
\ No newline at end of file
<?php
namespace Joshine\InstagramFeed\Controller\Adminhtml\OAuth;
use \Magento\Backend\App\Action;
class Redirect extends Action
{
protected $_publicActions = ['redirect'];
public function execute()
{
echo "1111";
// TODO: Implement execute() method.
}
}
\ No newline at end of file
<?php
namespace Joshine\InstagramFeed\Model\Config;
use DOMNode;
use LogicException;
class Converter extends \Magento\Widget\Model\Config\Converter
{
protected function _convertDepends($source)
{
$depends = [];
foreach ($source->childNodes as $childNode) {
if ($childNode->nodeName === '#text') {
continue;
}
if ($childNode->nodeName !== 'parameter') {
throw new LogicException(
sprintf("Only 'parameter' node can be child of 'depends' node, %s found", $childNode->nodeName)
);
}
$parameterAttributes = $childNode->attributes;
$dependencyName = $parameterAttributes->getNamedItem('name')->nodeValue;
$dependencyValue = $parameterAttributes->getNamedItem('value')->nodeValue;
if (!isset($depends[$dependencyName])) {
$depends[$dependencyName] = [
'value' => $dependencyValue,
];
continue;
}
if (!isset($depends[$dependencyName]['values'])) {
$depends[$dependencyName]['values'] = [$depends[$dependencyName]['value']];
unset($depends[$dependencyName]['value']);
}
$depends[$dependencyName]['values'][] = $dependencyValue;
}
return $depends;
}
}
<?php
namespace Joshine\InstagramFeed\Model\Config\Source;
use Magento\Framework\Option\ArrayInterface;
class Design implements ArrayInterface
{
const CONFIG = 0;
const CUSTOM = 1;
public function toOptionArray()
{
$options = [
[
'value' => self::CONFIG,
'label' => __('Use Config')
],
[
'value' => self::CUSTOM,
'label' => __('Custom')
]
];
return $options;
}
}
<?php
namespace Joshine\InstagramFeed\Model\Config\Source;
use Magento\Framework\Option\ArrayInterface;
class Layout implements ArrayInterface
{
const SINGLE = 'single';
const MULTIPLE = 'multiple';
const OPTIMIZED = 'optimized';
/**
* to option array
*
* @return array
*/
public function toOptionArray()
{
$options = [
[
'value' => self::SINGLE,
'label' => __('Single Row')
],
[
'value' => self::MULTIPLE,
'label' => __('Multiple Rows')
],
[
'value' => self::OPTIMIZED,
'label' => __('Optimized image')
]
];
return $options;
}
}
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Widget\Model\Config\Converter" type="Joshine\InstagramFeed\Model\Config\Converter"/>
</config>
\ No newline at end of file
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="admin">
<route id="joshine_instagram" frontName="joshine_instagram">
<module name="Joshine_InstagramFeed"/>
</route>
</router>
</config>
\ No newline at end of file
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
<section id="joshine_instagram_feed" translate="label" type="text" sortOrder="300" showInDefault="1" showInWebsite="1" showInStore="1">
<class>separator-top</class>
<label>Instagram Feed</label>
<tab>joshine</tab>
<resource>Joshine_InstagramFeed::configuration</resource>
<group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
<label>General</label>
<field id="head" translate="label" type="button" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1">
<frontend_model>Joshine\InstagramFeed\Block\Adminhtml\System\Config\Head</frontend_model>
</field>
<field id="enabled" translate="label comment" type="select" sortOrder="15" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Enable</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
</field>
<field id="appid" translate="label comment" type="text" sortOrder="45" showInDefault="1" showInWebsite="1" showInStore="1">
<label>AppId</label>
<depends>
<field id="enabled">1</field>
</depends>
</field>
<field id="app_secret" translate="label comment" type="password" sortOrder="45" showInDefault="1" showInWebsite="1" showInStore="1">
<label>App Secret</label>
<depends>
<field id="enabled">1</field>
</depends>
</field>
</group>
<group id="display" translate="label comment" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Display</label>
<field id="total_number" translate="label comment" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Total number of photos</label>
<validate>validate-no-empty validate-digits validate-digits-range digits-range-1-25</validate>
<comment>The maximum number is 25.</comment>
</field>
<field id="layout" translate="label comment" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Layout</label>
<source_model>Joshine\InstagramFeed\Model\Config\Source\Layout</source_model>
<comment>Select to arrange instagram images in one single row, two rows or in an organized layout</comment>
</field>
<field id="number_row" translate="label comment" type="text" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Number of row</label>
<comment>This value only applies to desktop and images will be automatically responsive depending on the device</comment>
<validate>validate-zero-or-greater validate-digits</validate>
<depends>
<field id="layout">multiple</field>
</depends>
</field>
<field id="show_caption" translate="label comment" type="select" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Show Caption</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
<comment>Select Yes to show caption when hover image.</comment>
</field>
<field id="show_popup" translate="label comment" type="select" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Show pop-up</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
<comment>Select Yes to show pop-up when click on image.</comment>
</field>
</group>
<group id="instagram" translate="label comment" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
<label>instagram</label>
<frontend_model>Joshine\InstagramFeed\Block\Adminhtml\System\Config\Account</frontend_model>
</group>
</section>
</system>
</config>
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<joshine>
<general>
<notice_enable>1</notice_enable>
<notice_type>announcement,new_update,marketing</notice_type>
<menu>0</menu>
</general>
</joshine>
</default>
</config>
\ No newline at end of file
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Joshine_InstagramFeed" setup_version="0.0.1">
</module>
</config>
<?php
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(
ComponentRegistrar::MODULE,
'Joshine_InstagramFeed',
__DIR__
);
<?php
/** @var \Joshine\InstagramFeed\Block\Adminhtml\System\Config\AccountField $block */
?>
<button>
<a href="<?= $block->getAuthUrl() ?>" target="_blank">
switch instagram account
</a
</button>
......@@ -177,7 +177,7 @@
$('.swatch-opt').on('swatch.initialized',function(){ $('.swatch-attribute.size .swatch-attribute-selected-option').after($('.sizechart.action')); })
if($('.swatch-attribute.size .swatch-attribute-selected-option').length > 0){
$('.swatch-attribute.size .swatch-attribute-selected-option').after($('.sizechart.action'));
$('.swatch-attribute.size .swatch-attribute-selected-option').after(" : " + $('.sizechart.action'));
}else{
$('.product-options-wrapper').after($('.sizechart.action'));
}
......
......@@ -106,12 +106,15 @@
.free-wrapper {
border-bottom: 1px solid #e8e7e7;
margin-bottom: 10px;
padding-bottom: 10px;
}
.free-wrapper , .product-intro__freeshipping-desc{
clear: both;
}
.free-wrapper p {
padding-left: 40px;font-size:13px;
font-size: 12px;
color: #767676;
}.product-intro__freeshipping-desc {
padding-left: 40px;font-size:13px;
}
......@@ -166,7 +169,7 @@
</div>
<style>
.joshine-desction{
.joshine-desction,.product-view-description{
width:100%;
}
......@@ -196,14 +199,9 @@
.product-view-description{
max-height: 450px;
overflow: auto;
width: 100%;
}
}
span.swatch-attribute-selected-option{
margin-left: 20px;
color: cornflowerblue;
}
</style>
<div class="product-view-description">
......
......@@ -168,16 +168,15 @@
<div id="areaMask" class="mask"></div>
</li>
<style>
#product-intro__freeshipping-more-3{
display: revert;
color: #2d68a;
font-size: large;
float: right;
margin-top: 0px;
text-decoration: underline;
}
@media (min-width: 1024px){
#product-intro__freeshipping-more-3{
display: inline-block;
display: inline-block;
color: #2d68a;
font-size: 12px;
line-height: 1;
float: right;
margin-top: 10px;
}
.action.primary.tocart{
font-size: 18px;
background-color: #000;
......
......@@ -538,7 +538,10 @@ ul {
}
.product-info-wrapper .price-final_price .price{
font-size: 24px;
font-size: 30px;
font-weight: 700;
font-family: auto;
color: black;
}
.product-info-wrapper{
display: grid;
......@@ -567,6 +570,11 @@ ul {
display: flex;
justify-content: space-between;
}
.product-info-price .price-box {
margin-top: 20px;
margin-bottom: 20px;
}
}
.cms-home .cms-index-index .page-layout-1column > main#maincontent {
......@@ -2247,14 +2255,17 @@ button.action.submit.primary {
//选择label样式
.swatch-attribute-label{
margin-right: 0.25rem;
font-size: 16px;
font-weight: 700;
overflow: hidden;
margin-right: 1rem;
font-weight: 500;
text-overflow: ellipsis;
white-space: nowrap;
margin-bottom: revert;
font-size: larger;
}
.swatch-attribute {
margin-bottom: 1.5rem !important;
}
#product-intro__freeshipping-more-3{
......@@ -2265,17 +2276,29 @@ button.action.submit.primary {
margin-top: -10px;
}
.swatch-option.color, .swatch-option.image{
width: 40px !important;
height: 40px !important;
background-clip: content-box!important;
padding: 3px;
}
//详情页mobile修改
@media (max-width: 1024px){
.product-info-wrapper .page-title span.base {
font-size: 20px;
font-size: 22px;
float: left;
margin-left: -10px;
font-weight: 400;
font-weight: 500;
}
.product-info-wrapper .price-final_price .price {
color: #000;
font-size: 24px;
font-weight: 600;
font-family: auto;
color: black;
}
......@@ -2321,37 +2344,35 @@ button.action.submit.primary {
#size-chart .table-wraper-fix table {
max-width: 100% !important;
}
}
.swatch-option.color, .swatch-option.image{
width: 30px !important;
height: 30px !important;
background-clip: content-box!important;
padding: 1px;
border: 1px solid rgba(23,23,23,0.3);
.swatch-option.color, .swatch-option.image{
width: 30px !important;
height: 30px !important;
background-clip: content-box!important;
padding: 3px;
}
}
.product-info-main .swatch-option.color, .swatch-option.image{
margin-right: 3% !important;
margin-right: 10px !important;
}
.swatch-option.color.selected{
border: 2px solid black!important;
border: 1px solid black!important;
}
.swatch-option.image.selected{
border: 2px solid black!important;
border: 1px solid black!important;
}
.swatch-option.text{
width: auto!important;
padding: calc( 8.5px) calc( 11px);
line-height:10px!important;
min-width: 40px;
min-width: 70px;
text-align: center;
font-size: 15px;
background: none!important;
border:2px solid rgba(23, 23, 23, 0.3);
border:1px solid rgba(23, 23, 23, 0.3);
border-radius: 15px;
margin-right: 10px;
}
......@@ -2361,7 +2382,7 @@ button.action.submit.primary {
}
.swatch-attribute.size .swatch-attribute-selected-option{
font-size: 15px;
font-size: 12px;
color: rgba(23, 23, 23, 0.6) !important;
}
......@@ -2372,6 +2393,8 @@ button.action.submit.primary {
display: none;
}
.fieldset .swatch-attribute-options.clearfix{margin-top: 20px !important;}
@media (max-width: 768px){
.swatch-attribute-selected-option-size-content span.swatch-attribute-selected-option{
margin-left: 0!important;
......@@ -2406,6 +2429,7 @@ button.action.submit.primary {
height: 30px !important;
border-radius: 50% !important;
line-height: 30px;
margin: 1px !important;
}
.swatch-option.text
......@@ -2413,7 +2437,7 @@ button.action.submit.primary {
width: auto !important;
line-height: 10px!important;
height: 30px !important;
min-width: 30px;
min-width: 50px;
}
.swatch-option::before{
......@@ -2542,6 +2566,10 @@ button.action.submit.primary {
display: none;
}
.stock.available {
display: none;
}
//product view right
@media(min-width: 1024px) {
.page-main>.columns>.sidebar-main{
......@@ -2553,12 +2581,11 @@ button.action.submit.primary {
width: 100%;
}
.product-info-wrapper .page-title span.base{
font-size: 20px;
font-weight: 400;
color: #292929;
font-size: 18px;
padding-bottom: 1px;
margin-bottom: 0;
line-height: 0px;
font-weight: 400;
}
......@@ -2955,6 +2982,13 @@ tr.grand.totals {
}
}
.product-info-stock-sku {
display: flex;
align-items: center;
gap: 0.5rem;
border-bottom: 1px solid lightgrey;
font-size: 12px;
}
.swatch-option.selected:before{
box-shadow:none;
......
......@@ -3537,8 +3537,8 @@ For terms of use, see http://www.unicode.org/copyright.html
</dates>
<numbers>
<symbols numberSystem="latn">
<decimal>,</decimal>
<group>.</group>
<decimal>.</decimal>
<group>,</group>
<list>;</list>
<percentSign>%</percentSign>
<plusSign>+</plusSign>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment