diff --git a/docs/getting_started/a_simple_webpage.md b/docs/getting_started/a_simple_webpage.md new file mode 100644 index 000000000..8cc565da2 --- /dev/null +++ b/docs/getting_started/a_simple_webpage.md @@ -0,0 +1,129 @@ +Hello World is a good start, but what if you want something a bit more fancy.. Something like an HTML document saying "Hello World". If that's what you want, follow along: + +## Basic Webpage +Let's start our webpage with.. well.. a webpage. But before we create a webpage we need to place it somewhere Crow recognizes, for now this directory is going to be called `templates`, but we can [change it later](../../guides/templating/#page). + +Once our `templates` folder is created, we can create our HTML document inside it, let's call it `fancypage.html`. + +After that we can just place something simple inside it like: +``` html title="templates/fancypage.html" + + + +

Hello World!

+ + +``` +
+Now that we have our HTML page ready, let's take our Hello World example from earlier: +``` cpp linenums="1" +#include "crow.h" +//#include "crow_all.h" + +int main() +{ + crow::SimpleApp app; //define your crow application + + //define your endpoint at the root directory + CROW_ROUTE(app, "/")([](){ + return "Hello world"; + }); + + //set the port, set the app to run on multiple threads, and run the app + app.port(18080).multithreaded().run(); +} +``` +
+ +And now let's modify it so that it returns our cool page: +``` cpp title="/main.cpp" linenums="1" hl_lines="10 11" +#include "crow.h" +//#include "crow_all.h" + +int main() +{ + crow::SimpleApp app; + + //define your endpoint at the root directory + CROW_ROUTE(app, "/")([](){ + auto page = crow::mustache::load_text("fancypage.html"); + return page; + }); + + app.port(18080).multithreaded().run(); +} +``` + +Your project should look something something like: +``` +./ + |-templates/ + | |-fancypage.html + | + |-main.cpp + |-crow_all.h +``` +or +``` +./ + |-templates/ + | |-fancypage.html + | + |-crow/ + | |-include/... + | |-crow.h + |-main.cpp +``` + + +Once the code is done compiling, if we call `http://localhost:18080/` we get our Hello World in an HTML document rather than just plain text. + +!!! note + + Compilation instructions are available for [Linux](../setup/linux#compiling-your-project), [MacOS](../setup/macos#compiling-using-a-compiler-directly), and [Windows](../setup/windows#getting-and-compiling-crow) + + +## Template Webpage with a variable +But we can make things even more exciting, we can greet a user by their name instead!! + +Let's start with our webpage, and modify it with a little bit of [mustache](../../guides/templating) syntax: +``` html title="templates/fancypage.html" hl_lines="4" + + + +

Hello {{person}}!

+ + +``` + +1. `{{}}` in mustache define a simple variable + +
+Now let's modify our C++ code to use the variable we just added to our webpage (or template): +``` cpp title="/main.cpp" linenums="1" hl_lines="9-12" +#include "crow.h" +//#include "crow_all.h" + +int main() +{ + crow::SimpleApp app; + + //define your endpoint at the root directory + CROW_ROUTE(app, "/")([](std::string name){ // (1) + auto page = crow::mustache::load("fancypage.html"); // (2) + crow::mustache::context ctx ({{"person", name}}); // (3) + return page.render(ctx); //(4) + }); + + app.port(18080).multithreaded().run(); +} +``` + +1. We are adding a `string` variable to the URL and a counterpart (`std::string name`) to our Route, this can be anything the user wants. +2. We are using `load()` instead of `load_text()` since we have an actual variable now. +3. We are creating a new [context](../../guides/templating/#context) containing the `person` variable from our template and the `name` we got from the URL. +4. we are using `render(ctx)` to apply our context to the template. + +Now (after compiling the code and running the executable a second time) calling `http://localhost:18080/Bob` should return a webpage containing "Hello Bob!". **We did it!** + +For more details on templates and HTML pages in Crow please go [here](../../guides/templating/) diff --git a/docs/getting_started/your_first_application.md b/docs/getting_started/your_first_application.md index d24f91e1f..f70ab330e 100644 --- a/docs/getting_started/your_first_application.md +++ b/docs/getting_started/your_first_application.md @@ -38,7 +38,7 @@ Please note that the `port()` and `multithreaded()` methods aren't needed, Thoug Once you've followed all the steps above, your code should look similar to this -``` cpp linenums="1" +``` cpp title="main.cpp" linenums="1" #include "crow.h" //#include "crow_all.h" @@ -55,4 +55,7 @@ int main() app.port(18080).multithreaded().run(); } ``` -After building and running your .cpp file, you should be able to access your endpoint at [http://localhost:18080](http://localhost:18080). Opening this URL in your browser will show a white screen with "Hello world" typed on it. + +You then need to compile your code on your [Linux](../setup/linux#compiling-your-project), [MacOS](../setup/macos#compiling-using-a-compiler-directly), or [Windows](../setup/windows#getting-and-compiling-crow) machine + +After building your `.cpp` file and running the resulting executable, you should be able to access your endpoint at [http://localhost:18080](http://localhost:18080). Opening this URL in your browser will show a white screen with "Hello world" typed on it. diff --git a/docs/overrides/partials/footer.html b/docs/overrides/partials/footer.html index ad65137c4..d95c86542 100644 --- a/docs/overrides/partials/footer.html +++ b/docs/overrides/partials/footer.html @@ -94,7 +94,7 @@