我是OctoberCMS的新手,我确实发现它非常好。
我在本地服务器上创建了2个项目。一个在Cakephp(http://localhost/5p_group/),另一个在OctoberCMS(http://localhost/5p_front/)。
我在OctoberCMS项目中使用Static Pages插件(http://localhost/5p_front/),我使用静态页面插件创建了页眉和页脚菜单,这在10月份运行正常在前端的项目,因为我能够分别显示页眉和页脚菜单。
我还使用builder plugin创建了自己的插件,我也可以在OctoberCMS前端显示数据。
但现在我的要求是获取页眉,页脚菜单以及将我的插件数据提供给我的Cakephp项目http://localhost/5p_group/
我想获取两者的数据(Header footer菜单和存储在我的数据库表中的My plugin数据)。
所以我想知道OctoberCMS提供了在OctoberCMS中创建apis或webservices的能力以及使用CURL
或类似http://localhost/5p_front/getHeaderMenu,http://localhost/5p_front/getFooterMenu之类的东西在我的Cakephp项目中调用它的能力。 ,http://localhost/5p_front/getPluginData并以JSON或XML提供响应?
任何帮助或建议都将受到高度赞赏。
谢谢
答案 0 :(得分:4)
好的..最后这里是我的工作,从我开发的插件中获取数据及其表记录,并使用Static Pages插件创建使用的页眉或页脚菜单。
首先,如果您想在OctoberCMS中创建API或Web服务,您需要创建一个插件并创建一个名为 routes.php 的文件,或者您只需在一个文件中创建相同的文件你的插件。
所以我现在只在我开发的一个插件中创建了 routes.php 文件来测试并使我的网络服务暂时运行。
首先,我想从我的插件中获取数据,该插件使用数据表来存储它..所以我刚刚完成了这个
<强> routes.php文件强>
use technobrave\sociallinks\Models\Sociallink;
Route::post('/getSocialLinks', function () {
$social_links_data = Sociallink::all();
$arr = array();
foreach($social_links_data as $current_social_links_data)
{
$arr[] = array(
'id'=> $current_social_links_data['id'],
'social_logo'=> $current_social_links_data->social_logo->getPath()
);
}
return $arr;
});
我能够获得我想要的记录。
然后我使用Static Pages插件来获取页眉菜单,这就是我的想法。
<强> routes.php文件强>
/* Code to get menu item starts */
use Cms\Classes\ComponentBase;
use RainLab\Pages\Classes\Router;
use Cms\Classes\Theme;
use RainLab\Pages\Classes\Menu as PagesMenu;
/* Code to get menu item ends */
Route::post('/getHeaderMenu', function ()
{
$menuCode = 'main-menu'; // menu code
$theme = Theme::getActiveTheme();
$menu = PagesMenu::loadCached($theme, $menuCode);
$header_menu_list = array();
if ($menu)
{
$menu_list = $menu->attributes['items'];
if($menu_list)
{
$i=0;
foreach ($menu_list as $current_menu_list)
{
if($current_menu_list->reference == '')
{
$current_menu_list->reference = "#";
}
$header_menu_list[$i] = array(
'title'=>$current_menu_list->title,
'url'=>$current_menu_list->reference,
);
$header_menu_list[$i]['submenu_list'] = array();
if($current_menu_list->items)
{
$sub_menu_list = $current_menu_list->items;
foreach ($sub_menu_list as $current_submenu_list)
{
if($current_submenu_list->reference == '')
{
$current_submenu_list->reference = "#";
}
$header_menu_list[$i]['submenu_list'][] = array(
'title'=>$current_submenu_list->title,
'url'=>$current_submenu_list->reference,
);
}
}
$i++;
}
}
}
return $header_menu_list;
});
这将只是在我的OctoberCMS项目中获取我创建的标题菜单的列表。
希望这有助于并感谢您的支持人员。
非常赞赏。
答案 1 :(得分:3)
最好的方法是直接从数据库中获取数据。
在插件中,您可以创建一个名为routes.php
的文件,以便为您的应用程序创建路径。
例如,您可以在routes.php
<?php
Route::get('api/fetchModel/{id}', function($id){
$data = \Namespace\Pluginname\Models\Model::find($id);
return $data;
});
?>
当然,您也可以将路线重定向到插件内的控制器。要做到这一点,你可以创建一个名为http
的文件夹,在其中你可以创建一个名为controllers
的文件夹,在其中你可以创建你的控制器。
重定向到控制器的路由示例。
<?php
Route::get('/welcome/{id}', 'Namespace\Pluginname\Http\Controllers\WelcomeController@index');
?>
控制器就像那样
<?php namespace Namespace\Pluginname\Http\Controllers;
use Illuminate\Routing\Controller;
class WelcomeController extends Controller
{
/*
|--------------------------------------------------------------------------
| Welcome Controller
|--------------------------------------------------------------------------
|
| This controller renders the "marketing page" for the application and
| is configured to only allow guests. Like most of the other sample
| controllers, you are free to modify or remove it as you desire.
|
*/
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
// $this->middleware('guest');
}
/**
* Show the application welcome screen to the user.
*
* @return Response
*/
public function index($id)
{
$data = \Namespace\Pluginname\Models\Model::find($id);
return $data;
}
}
在这里,您可以在octoberCMS中找到一个示例API插件:https://github.com/daftspunk/oc-laravelapi-plugin