Hallo zusammen
Ist es möglich über die REST API Blogbeiträge zu importieren?
Ich habe in der Doku (REST API - Models) kein passendes Model finden können…
Hat das schonmal wer gemacht oder einen guten Rat für mich?
Liebe Grüße
Hallo zusammen
Ist es möglich über die REST API Blogbeiträge zu importieren?
Ich habe in der Doku (REST API - Models) kein passendes Model finden können…
Hat das schonmal wer gemacht oder einen guten Rat für mich?
Liebe Grüße
Dafür müsstest du dir eine eigene API-Resource schreiben, im Standard ist das nicht voresehen.
Danke für deine Antwort!
Gibt es eine andere relativ simple Lösung, Blogbeiträge programmiertechnisch ins System zu bekommen?
Dies muss nicht zwingend über die REST API laufen.
schließe mich der Frage an, hätte Intersse an einem Plugin / Script für den Import von Blogeinträgen in Shopware.
Das Schreiben einer eigenen Api ist nicht allzu schwer, wenn du darauf verzichten möchtest, dann musst du dir ein Script schreiben, welches die Blogeinträge direkt inklusive aller richtigen Abhängigkeiten und ohne Umwege direkt in die Datenbank von Shopware schreibt, bzw. aus dieser löscht.
Sprich:
$connect = mysqli_connect($host,$user,$pass,$db_name);
mysqli_query("INSERT INTO s_blogs(?) (Wert1, Wert2, Wert3…) VALUES (Var1, Var2, Var3) …
Soweit ich das gesehen habe plant Shopware aber auch in einer der kommenden Versionen die Api um alle Backend-Funktionalitäten zu erweitern, spätestens dann sollte es klappen.
Bis dahin versuchs mal hiermit, habe ich mal schnell zusammengeworfen:
Ordnerstruktur
HyoBlogApi
- Components
- Api
- Resource
- Blog.php
- Controllers
- Api
- Blog.php
- HyoBlogApi.php
- plugin.xml
HyoBlogApi.php
'onGetBlogApiController',
'Enlight_Controller_Front_StartDispatch' => 'onEnlightControllerFrontStartBlog'
];
}
/**
* @return string
*/
public function onGetBlogApiController()
{
return $this->getPath() . '/Controllers/Api/Blog.php';
}
/**
*
*/
public function onEnlightControllerFrontStartBlog()
{
$this->container->get('loader')->registerNamespace('Shopware\Components', $this->getPath() . '/Components/');
}
}
plugin.xml
Blog Rest Api Erweiterung
Blog Rest Api Extension
1.0
PStadtfeld
PStadtfeld
proprietary
Veröffentlichung
Release
Ressource->Blog.php
getManager()->getRepository(BlogModel::class);
}
/**
* Create new Blog
*
* @param array $params
* @return BlogModel
* @throws ApiException\ValidationException
*/
public function create(array $params)
{
/** @var BlogModel $blog*/
$blog = new BlogModel();
$blog->fromArray($params);
$violations = $this->getManager()->validate($blog);
/**
* Handle Violation Errors
*/
if ($violations->count() > 0) {
throw new ApiException\ValidationException($violations);
}
$this->getManager()->persist($blog);
$this->flush();
return $blog;
}
/**
* @param int $offset
* @param int $limit
* @param array $criteria
* @param array $orderBy
* @return array
*/
public function getList($offset = 0, $limit = 25, array $criteria = [], array $orderBy = [])
{
// ->leftJoin('d.multiShop', 'm')
//->addSelect('m')
$builder = $this->getRepository()->createQueryBuilder('blog');
$builder->select(['blog', 'tags', 'author', 'media', 'mappingMedia', 'assignedArticles', 'assignedArticlesDetail', 'attribute', 'comments'])
->leftJoin('blog.tags', 'tags')
->leftJoin('blog.author', 'author')
->leftJoin('blog.assignedArticles', 'assignedArticles')
->leftJoin('assignedArticles.mainDetail', 'assignedArticlesDetail')
->leftJoin('blog.media', 'mappingMedia')
->leftJoin('blog.attribute', 'attribute')
->leftJoin('blog.comments', 'comments', \Doctrine\ORM\Query\Expr\Join::WITH, 'comments.active = 1')
->leftJoin('mappingMedia.media', 'media')
->addOrderBy('comments.creationDate', 'ASC');
$query = $builder->getQuery();
$query->setHydrationMode($this->resultMode);
$paginator = $this->getManager()->createPaginator($query);
//returns the total count of the query
$totalResult = $paginator->count();
//returns the Dispatch data
$dispatch = $paginator->getIterator()->getArrayCopy();
return ['data' => $dispatch, 'total' => $totalResult];
}
/**
* Get One Dispatch Information
*
* @param $id
* @return mixed
* @throws ApiException\NotFoundException
* @throws ApiException\ParameterMissingException
*/
public function getOne($id)
{
$this->checkPrivilege('read');
if (empty($id)) {
throw new ApiException\ParameterMissingException();
}
$builder = $this->getRepository()->createQueryBuilder('blog');
$builder->select(['blog', 'tags', 'author', 'media', 'mappingMedia', 'assignedArticles', 'assignedArticlesDetail', 'attribute', 'comments'])
->leftJoin('blog.tags', 'tags')
->leftJoin('blog.author', 'author')
->leftJoin('blog.assignedArticles', 'assignedArticles')
->leftJoin('assignedArticles.mainDetail', 'assignedArticlesDetail')
->leftJoin('blog.media', 'mappingMedia')
->leftJoin('blog.attribute', 'attribute')
->leftJoin('blog.comments', 'comments', \Doctrine\ORM\Query\Expr\Join::WITH, 'comments.active = 1')
->leftJoin('mappingMedia.media', 'media')
->addOrderBy('comments.creationDate', 'ASC')
->where('blog.id = ?1')
->setParameter(1, $id);
/** @var DispatchModel $blog */
$blog = $builder->getQuery()->getOneOrNullResult($this->getResultMode());
if (!$blog) {
throw new ApiException\NotFoundException("Blog by id $id not found");
}
return $blog;
}
}
Controller->Api->Blog.php
resource = \Shopware\Components\Api\Manager::getResource('Blog');
}
/**
* GET Request on /api/Dispatch
*/
public function indexAction()
{
$limit = $this->Request()->getParam('limit', 1000);
$offset = $this->Request()->getParam('start', 0);
$sort = $this->Request()->getParam('sort', []);
$filter = $this->Request()->getParam('filter', []);
$result = $this->resource->getList($offset, $limit, $filter, $sort);
$this->View()->assign(['success' => true, 'data' => $result]);
}
/**
* Get one Dispatch
*
* GET /api/Dispatch/{id}
*/
public function getAction()
{
$id = $this->Request()->getParam('id');
/** @var \Shopware\Models\Dispatcher\Dispatcher $dispatch */
$dispatch = $this->resource->getOne($id);
$this->View()->assign(['success' => true, 'data' => $dispatch]);
}
}
ACHTUNG!
Die Api-Erweiterung verfügt so derzeit nur über Getter, um auch Einträge hinzufügen zu können, musst du die Setter-Methoden in der Ressource->Blog.php ergänzen. Da kann ich mich zeitlich momentan nicht durchwurschteln, sorry