The phase manager in ControlLogix is pretty straightforward. It merely controls the phase's states -- Idle, Running, Holding, Held, etc. It allows the creation of a single routine of each of the "active" states (Running, Holding, Restarting, Aborting), as well as a "Prestate" routine which is always executed. Only one "active" routine is enabled at a time (depending on the phases's state), saving on scan time and allowing for potential multiple destructive bits. While programming them in SFCs is popular (because of how S88 is usually presented), they can be in any 61131-3 language.
There are special commands (PCMD, PSC) to allow the PLC (and by extension, an HMI or Batch engine) to start phases, and let the Phase Manager know when phases are complete.
That's all there is to phase manager. It isn't very hard. Once, when I upgraded to an L8x processor and phase manager wasn't supported yet, I wrote my own with 10 lines of code in an AOI, and some common copy-paste code. PSC commands became OTE(PSC_Running); that sort of thing.
You don't need to use Phase Manager, it just makes things easier if you do.
As for "Batch" -- well, that's a whole different can of worms. Rockwell has two canned solutions, FT Batch (which natively works with Phase Manager), but is pricy. They also have "LBSM" -- Logic Batch & Sequence Manager -- which is a PlantPAx add-in, which can be used to create simple recipes.
Of course, you don't have to use Rockwell batch products to use it's phase manager: I've built phase-logic-interface AOIs / coding practices to interface with Wonderware's InBatch and Fix's IBatch. I've also written my own batch engines in the PLC. Which way you want to go depends on how complex the system is; how much variability you have in recipes and the equipment, and all the other things that the S88 standard discusses.
No one can tell you "how to build a phase manager program" -- because everything depends on your physical and process models (in S88 parlance). "All" you do is create a program of an "Equipment Phase" type, and create at least a "Running" routine with whatever logic needs to happen when the phase is running and that's it. You might want to add a PSC() instruction at the end, if you have some sort of sequencer logic in there. Otherwise (by default, but configurable) the Phase Manager will assume the state is complete on one scan. Other than that, it's no different from any other PLC program: it's up to you to define how things work.
Good luck.