/path/to/project/ это путь к проекту и данный путь нигде не фигурирует, это та директория из которой запускается основной index.php
{
"require": {
"php": ">=5.5.9",
"slim/slim": "2.*",
"twig/twig": "~1.18",
"slim/views": "^0.1.3",
"robmorgan/phinx": "^0.4.4",
"illuminate/database": "^5.1"
},
"minimum-stability": "stable",
"autoload": {
"psr-4": {
"MyName\\MyProject\\": "application"
}
}
}
MyClass
лежит в папке application
- то у него должно быть пространство имен \MyName\MyProject
(полное имя класса получается \MyName\MyProject\MyClass
). Если ваш класс MyController лежит в папке application/Mvc/Controllers
, то, соответственно \MyName\MyProject\Mvc\Controllers\MyController
.php composer.phar install
(или php composer.phar dumpautoload
для пересборки аавтозагрузчика) и подключите файл автозагрузчика в index.php include '../vendor/autoload.php';
Первый вопрос который меня интересует это PSR-0 или PSR-4. На сколько я понял по состоянию на 21 октября 2014 года PSR-0 был помечен как устаревший.
про PSR-3 я вообще как-то не нашел русскоязычной информации, словно такого стандарта нет
/path/to/project/ это путь к проекту и данный путь нигде не фигурирует, это та директория из которой запускается основной index.php
./vendor это папка назначение которой я не понимаю
в итоге честно говоря я запутался в том как правильно надо строить свои каталоги, какие папки обязательные какие нет, когда использовать src, когда lib, когда tests, почему в некоторых структурах приходится дважды указывать имя поставщика и имя пкета и т.д.
/config Глобальные настройки проекта.
/data Временные файлы. Например:
/data/cache Файлы кеша.
/data/logs Логи.
/data/tmp Прочие временные файлы.
/module Модули проекта. Например:
/module/Backend
/module/Backend/config Настройки модуля.
/module/Backend/src Файлы PHP модуля. Например:
/module/Backend/src/Backend/Path/To/ExampleClass.php
/module/Backend/test Unit-тесты модуля.
/module/Backend/view Шаблоны модуля.
/module/Frontend/...
/public/index.php
/public/css
/public/font
/public/img
/public/js
/vendor
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("О центре");
echo '
<div class="side"><!-- Тут боковое меню --></div>
<div class="main">
<!-- Тут контент, который надо редактировать -->
<p>';
?>
Текст
<?
echo '</p>
</div>';
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
<div class="side"> и <div class="main">
вынести в шаблон. //<?php
$productId = -1;
if (!\Bitrix\Main\Loader::includeModule('catalog')) {
throw new \Bitrix\Main\SystemException('Ошибка подключения модуля "catalog"');
}
$addResult = Add2BasketByProductID(
$productId,
1,
[
'LID' => 's1',
],
[]
);
if (!$addResult) {
$strError = '';
/** @global $APPLICATION $ex */
if ($ex = $APPLICATION->GetException()) {
$strError = $ex->GetString();
}
echo sprintf('Ошибка добавления товара %s в корзину: %s', $productId, $strError);
} else {
echo sprintf('Товар %s успешно добавлен в корзину', $productId);
}
use Bitrix\Main;
use Bitrix\Main\Entity;
$eventManager = Main\EventManager::getInstance();
$eventManager->addEventHandler("", "TransactionOnBeforeUpdate", "TransactionBeforeUpdate");
function TransactionBeforeUpdate(Entity\Event $event)
{
echo "<pre>";
$arParameters = $event->getParameters();
var_dump($arParameters);
return 1;
}
use Bitrix\Sale\Compatible\DiscountCompatibility;
use Bitrix\Sale\Basket;
use Bitrix\Sale\Discount\Gift;
use Bitrix\Sale\Fuser;
class DiscountsHelper
{
/**
* Возвращает массив id всех доступных подарков для товара
*
* @param int $productId - идентификатор товара
* @return array - массив с id подарков для товара
*/
public static function getGiftIds($productId)
{
$giftProductIds = [];
if (!$productId) {
return $giftProductIds;
}
DiscountCompatibility::stopUsageCompatible();
$giftManager = Gift\Manager::getInstance();
$potentialBuy = [
'ID' => $productId,
'MODULE' => 'catalog',
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
'QUANTITY' => 1,
];
$basket = Basket::loadItemsForFUser(Fuser::getId(), SITE_ID);
$basketPseudo = $basket->copy();
foreach ($basketPseudo as $basketItem) {
$basketItem->delete();
}
$collections = $giftManager->getCollectionsByProduct($basketPseudo, $potentialBuy);
foreach ($collections as $collection) {
/** @var \Bitrix\Sale\Discount\Gift\Gift $gift */
foreach ($collection as $gift) {
$giftProductIds[] = $gift->getProductId();
}
}
DiscountCompatibility::revertUsageCompatible();
return $giftProductIds;
}
}
\Bitrix\Main\Loader::IncludeModule("highloadblock");
$xmlID = '21XlirMU'; //подставьте нужный вам внешний код
$tblName = 'years';
$select = ['UF_NAME']; // или как у вас поле называется
$filter = ['UF_XML_ID'=>$xmlID];
$limit = 1;
$hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getList(
array("filter" => array('TABLE_NAME' => $tblName))
)->fetch();
$entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
$Query = new \Bitrix\Main\Entity\Query($entity);
$Query->setSelect($select);
$Query->setFilter($filter);
$Query->setOrder([]);
$Query->setLimit($limit);
$result = $Query->exec();
$arResult = new \CDBResult($result);
в этой редакции нету в разделе Магазин пункта Платежные системы
И как админ сможет просматривать оплаченные заказы? С помощью инфоблоков?
<?php
AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
function MyOnAdminContextMenuShow(&$oAdminList)
{
/**
* $type - тип кода инфоблока, например news, events и т.д.
* $iblock - идентификатор инфоблока
*
* Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
*/
if ( $oAdminList->table_id == "tbl_iblock_list_".md5($type.".".$iblock) )
{
// полезные действия
}
}
?>
AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
function MyOnAdminContextMenuShow(&$oAdminList)
{
/**
* $type - тип кода инфоблока, например news, events и т.д.
* $iblock - идентификатор инфоблока
*
* Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
*/
if ( $oAdminList->table_id == "tbl_iblock_list_".md5("structure.4") )
{
$arActions = $oAdminList->arActions;
$arActions['alert'] = 'Ругаться!';
$oAdminList->AddGroupActionTable($arActions);
}
}
AddEventHandler("main", "OnAfterEpilog", "iblockAlert");
function iblockAlert()
{
$oRequest = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
// Проверяем, что работает только в админке
if ( $oRequest->isAdminSection() )
{
if (
// Интересуют только интерактивные запросы
$oRequest->get('mode')=='frame'
// Где передана переменна IBLOCK_ID
&& $oRequest->get('IBLOCK_ID')==4
// Соответствующие нашему action
&& $oRequest->get('action')=='alert'
)
{
/**
* Вот тут можно сделать что угодно
* Можно получить выделенные ID
* через $oRequest->get('ID')
* Если он пуст, значит действие на всех элементах инфоблока
*/
}
}
}