第十一天:我需要一个帮助Plug-in

Jenkins Testlink Plug-in使用总结 Jenkins Testlink Plug-in 阅读详情

作者:梁祺 (eclipsesbs@gmail.com)

来自:http://www.benisoft.net/day11/index.html


今天我们来为Itinerary创建帮助plug-in。一般我们都会将帮助内容放在一个单独的plug-in里,但Eclipse也允许帮助内容和程序在同一个plug-in里。不过前者更加常见也更加规范。

同样,我们需要创建一个新的plug-in项目,选择"File -> New -> Others",在向导对话框里选择Plug-in Project,项目名称为"eclipse.tutorial.itinerary.help",略微有些不同的是,帮助plug-in没有任何代码,所以可以把勾选项Create a Java project去掉。点击Next按钮,将plug-in的名称改为"Itinerary Help",再点击Next按钮。选择模板"Plug-in with sample help content",点击Next按钮。

选择Primary,这样会生成标准的Eclipse帮助结构。点击Finish按钮生成项目。标准的Eclipse帮助结构有五个大类。

这五个大类分别是:

  • Getting Started:提供简单教程,帮助用户上手。
  • Concepts:应用所涉及的一些概念或术语的解释。
  • Tasks:告诉用户如何完成一些任务,也就是How-to。
  • Reference:比较详细的帮助内容,一般会按界面来安排,比如视图,详细说明视图中的所有菜单,按钮,以及每个控件等等。
  • Samples:存放一些例子,比如报表软件可以提供一些报表的例子。

将包含该帮助plug-in的Eclipse启动起来后,我们选择"Help -> Help Contents",在帮助左侧就能看到这五大类的帮助内容。

我们回过来看一下项目。在Package Explorer View里,可以看到html目录里包含很多HTML文件,这些是帮助的内容。下面还有很多toc开头的XML文件,这些文件定义了帮助的结构,也就是确定HTML文件在帮助中的位置,以及相互关系。

双击plugin.xml在Plug-in Editor中打开,来到Extensions子页,可以看到该帮助plug-in扩展了org.eclipse.help.toc这个扩展点,并定义了若干个TOC(Table of Contents),TOC定义了帮助的结构,它本身不包含任何帮助内容。每个TOC都关联一个XML文件。其中第一个TOC,它的Primary属性为true,这意味着这个TOC是根TOC,将作为一个根节点出现在Eclipse的帮助系统中,其他的TOC都挂接在这个根TOC下。如果帮助plug-in需要不止一个根节点,可以设置多个TOC的Primary属性为true,这时需要仔细关联其他TOC到正确的根TOC下。

我们打开第一个TOC的XML文件,也就是toc.xml文件。Eclipse为TOC XML文件提供了编辑器方便查看和编辑,我们可以看到该TOC定义了两个主题,Main Topic和Main Topic 2,第一个主题的内容存放在html/maintopic.html,并且它还有一个子主题,它内容存放在html/subtopic.html里。但是由于这个TOC是根TOC,这些主题是不会被显示出来的,当用户在帮助中选择这个根节点是,显示的是html/toc.html。我相信这是模板的一个Bug。

我们再来看看tocconcepts.xml,这里需要注意一下Anchor属性,Concepts TOC被链接到toc.xml#concepts上,这意味着在根TOC上会自动创建一个锚点,用于放置Concepts的内容。这样不同的TOC就被链接在一起,形成一个树状结构,避免维护一个大而全的TOC。Concepts下面定义了两个主题,也是Main Topic和Main Topic 2。

Concepts的第一个主题Main Topic的内容存放在html/concepts/maintopic.html。

通过这个例子,我们可以了解Eclipse的帮助是怎么组织的,帮助的文字图片都是以HTML文件的形式编写的,而帮助的结构是由TOC XML文件确定的,也就是指定主题所对应的HTML文件,以及主题之间的父子关系。这种内容和结构分开的做法使得Eclipse帮助的维护非常的简单和清晰。

Block块设备层Plug和Unplug机制 https://www.pianshen.com/article/11461004172/ 阅读详情

相关推荐

读懂 ABAP 里的 object plug-in:从 BAdI 运行机制到 Clean Core 扩展设计

本文深入解析了SAP ABAP中的object plug-in概念及其在BAdI增强机制中的核心作用。文章指出,object plug-in是BAdI实现类的运行时实例,由BAdI对象统一管理,在GET BADI时根据过滤器条件创建或复用。相比设计时的BAdI定义和实现,object plug-in作为运行时对象常被忽视,但却是增强逻辑实际执行的载体。文章详细阐述了GET BADI和CALL BADI的执行机制,强调了过滤器设计的重要性,并通过采购审批校验的案例展示了如何利用object plug-in实现

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1261

创建一个plug-in Project的工程

1、eclipse中安装plug-in project步骤一:进入eclipse菜单Help->Install New Software步骤二:"Work With:" -> "--All Available Sites--","type" >"Plug-in"步骤三:过滤项中安装:"Eclipse Plug-in Development Environment",重

qq_42478602的博客 2595

新手避坑指南:从GEO数据库下载单细胞测序数据的5个关键步骤(附实操截图)

本文为单细胞测序数据下载新手提供5个关键避坑步骤,涵盖数据搜索准备、样本量评估、文件选择决策、元数据诊断及高效下载技术。通过实操截图和代码示例,帮助研究者快速锁定GEO数据库中的优质单细胞测序数据,避免常见错误。

weixin_30296405的博客 667

第一天:第一个Plug-in,Hello World

作者:梁祺 (eclipsesbs@gmail.com) 来自:http://www.benisoft.net/day1/index.html 刚开始接触Plug-in开发,我们可以先看一个最简单的Plug-in,Hello World。这个Plug-in可以通过Eclipse提供的模版生成,不需要写任何代码。不过通过这个Plug-in,可以了解Plug-in的基本结构,对于今后的Plug

Eclipse 按步就搬 764

【蓝桥杯——单片机学习笔记】十三.点阵(STC15F2K60S2)

一.点阵内部图 点阵的有两种,分为共阴和共阳(与数码管类似,后续代码根据共阳点阵编写)。点阵的控制主要是每行和每列电平的控制。如图,以共阳为例:若要使左上角的灯亮,则第一行输出高电平(其他行均为低电平),第一列输出低电平(其他列均为高电平)。 二.原理图 与数码管共用接口,所以数码管和点阵的显示只能选一个使用! 原理图中点阵的接口R5即代表第5行(Row),C8即代表第8列(Column)。通...

默默无闻小菜鸡的博客 2012

华为EC6108V9E刷机实战:从U盘准备到开机优化的完整避坑指南

本文提供华为悦盒EC6108V9E刷机与优化的完整实战指南。针对搭载RK3228芯片和安卓4.4.4系统的设备,从型号确认、固件选择、U盘准备,到详细刷机步骤、常见故障排除,以及刷机后的深度性能优化,手把手帮助用户规避风险,让旧盒子焕发新生,成为流畅的全能媒体中心。

weixin_29324401的博客 1192

NetSuite Plug-In 101

NetSuite Plug-In的背后是NetSuite架构师的一个想法,就是“面向对象”。这个设计的初衷是,将NetSuite系统中的某些业务逻辑松耦合,让开发者可以对这些业务环节进行修改。

NetSuite知识会 705

因时机器人-灵巧手配置方案(Ubuntu18.04)

因时机器人-灵巧手配置方案(Ubuntu18.04)

CH_monsy的博客 3848

java plug in插件下载_Java Plug-in(一) 创建插件项目

首先申明下,本文为笔者学习《Eclipse插件开发学习笔记》的笔记,并加入笔者自己的理解和归纳总结。创建Plug-in项目在Eclipse里,依次选择【File】->【New】->【Project】,选择【Plug-in Project】选项。 在配置里面选择生成【Activator】类用来控制插件的生命周期。 Activator类被默认实现,继承AbstractUIPlugin。其中...

weixin_39680121的博客 1767

CANoe开发入门到精通读书笔记(2)——CAPL编程

CAPL函数的语法跟C语言很类似,但也包含一些C语言所不具备的功能大部分CAPL支持的数据类型都可以直接声明为函数参数, 例如,整型、浮点型、枚举、结构、定时器以及它们的引用。但有一些类型不能被直接声明,而需要加上*号(注意该符号并不是C语言中 指针的意思)。例 如 : signal * s 、 envvarInt * ev 、 sysvarFloat * sv 、 diagRequest * dr、diagResponse * dr、int matrix[][],以及。

weixin_66275497的博客 6459

LinuxCNC开发实战:从安装到EtherCAT配置全解析

本文详细解析LinuxCNC开发实战,从系统安装到EtherCAT总线配置全流程。涵盖实时内核优化、伺服驱动器PDO映射、HAL配置及自定义运动学开发,帮助开发者快速搭建工业级数控系统,提升运动控制精度与稳定性。

rgv234567的博客 353

Eclipse中没有Plug-in Development 或 Plug-ins选项

【更多资讯及资料获取,关注微信公众号号:浅醉JAVA】 如果没有这个选项,可能是你没有安装这个插件,下面是该插件的安装方法: Plug-in Development安装方法: Help->Install New SoftWare 在Work with框中输入:http://download.eclipse.org/releases/photon/201806271001 在列表...

weixin_42629535的博客 8277

【ESD专题】从原理上分析TVS管PCB Layout的经验法则

我们常常会听到的一些经验法则,按这些经验法则去做,一般也不会有什么问题,但是到底是为什么呢? 没有从原理上分析和证明的时候,往往在Layout之后还要担心实际测试结果怎么样。或是在实际测试出问题后,根本无法进行分析,难道说修改一个版本就好了?那要从哪里修改呢?也无从下手呀。...

一点硬件 1446

什么是Java Plug-in

 转载自http://blog.youkuaiyun.com/snipps/article/details/5524853 什么是Java Plug-in         Java-plug-in,也就是我们通常说的Applet与JWS(Java Web Start),从技术上来讲,他们都隶属与RIA(Rich Internet Application)Java Plug-in的存在,使得

Sy9876的专栏 4908

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

985小水博的摸鱼日常 3091

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

PanSou 插件实战:Labi 网盘资源站 HTML 结构分析与 Go 爬虫提取实现

本文以 PanSou 仓库中 [plugin/labi/html结构分析.md](https://link.gitcode.com/i/0e141ef4c06308bbbe8cbc1ec2a52c89) 为骨架,完整剖析蜡笔系列网盘资源站(xiaocge.fun / duopan.fun)的搜索结果页与详情页 DOM 结构,并结合 [plugin/labi/labi.go](https://lin

gitblog_00614的博客 729

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Using OBJECT, EMBED and APPLET Tags in Java Plug-in

from : http://doc.javanb.com/javasdk-docs/guide/plugin/developer_guide/using_tags.html#codebaseThis chapter includes the following topics:IntroductionJavaTM Plug-in in IE on WindowsJava Pl

zhouysh的专栏 1615

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Dynamics CRM Plug-in

Plug-in 就是我们俗称的dll file 或者是assembly file. 里面有自定义的代码可以运行在服务器端 Plug-in Pipeline: 只有3个阶段可以做改动: Pre-Validation Pre-Operation Post-Operation Main Event 阶段是不可以做更改的 Plug-in Messages...

weixin_30950607的博客 221

powerbuilder window plug-in

html文件:html>    HEAD>        TITLE>PB window plug-inTITLE>    HEAD>    BODY>                H1>PB window plug-inH1>        P>使用window plug-in在浏览器中显示一个child类型窗口。P>        P>EMBED SRC=crp.pbd WIDTH=

qyz的专栏 1253

Eclipse3.4 Plug-in Spy

 在Eclipse插件开发中,我们经常"Monkey See Monkey Do",Eclipse3.4提供了和VC++ spy++一样强大的功能的:Plug-in Spy,现在你想模仿Eclipse已有的一个界面可以使用这个spy来探测它的实现类了,这样就省着我们每次都先猜半天,然后在Search了。可以使用快捷键Shit+Option+F1 (Alt+Shift+F1 on Win

fuliangliang的Blog 2621

RCP: 把常用的库打包成plug-in

开发系统的时候,经常会用到一些开源的库,如果log4j, JFreeChart等。如果是开发RCP的系统,那么最好的办法就是把这些库作为plug-in来安装。但是这些库并不是现成的plug-in方式的。 ckng的blog中,给出来一个把这种第三方的库打包成plug-in方式的办法。简单的说:创建一个plug-in的项目,倒入第三方库中的jar文件,并且添加到运行库中,最后把这个项目导出成一个pl

kukoo的blog 1613

java plug in错误_Eclipse启动失败 - 在安装BlackBerry Java Plug-in for Eclipse v1.3之后

为了开发BlackBerry程序,下载了一个BlackBerry Java Plug-in for Eclipse v1.3。在安装完之后,得到了一个包含有BlackBerry开发插件的eclipse。但是,这个eclipse却怎么也启动不了,弹出一个包含如下信息的对话框。关闭这个对话框,Eclipse就退出了。JVM terminated. Exit code=-1-Dosgi.required...

weixin_39744512的博客 159

Maya Plug-in 调试及技巧(1)

调试方法 在Visual Studio中以debug模式生成目标mll在Maya中加载此mllctrl+alt+p打开附加到进程,然后附加到Maya进程中建立断点(任何时候都可以)执行mll中的命令或节点,当遇到断点时会自动停下切换到VS中 调试技巧分帖不断记录下自己总结的调试技巧。1死循环避免机虽然避免for和while嵌套太深是每个程序员必备的意识,但是有时候难免插入太深发生意外,导致maya不省人事。一旦意外发生唯一的办法就是结束进程了。之前调试这种程序段是很纠结的,自己明知道这次加载执行必然会死循环

机器猫的CG空间 2943

关于BlackBerry Eclipse Plug-in 环境中模拟器的恢复

一时间似乎不知道从哪里开始, 关于BlackBerry开发有太多要写. 先说一下BlackBerry Eclipse Plug-in环境中模拟器的恢复.现在大部分的BlackBerry开发者都使用Eclipse Plug-in环境做开发了, 不再使用我们所不熟悉的BlackBerry JDE. 在BlackBerry Eclipse Plug-in环境中有我钟爱的代码提示工具, 有我经

keyboardOTA的专栏 2438
上一篇: 第十天:Editor是怎么打开文件和保存文件的
下一篇: 第十二天:别都长的和Eclipse IDE一个样
std3lqi
博客等级 码龄24年 1粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值